mirror of
https://github.com/systemd/systemd.git
synced 2024-11-07 01:27:11 +03:00
1d98fef17d
Let's lot at LOG_NOTICE about any processes that we are going to SIGKILL/SIGABRT because clean termination of them didn't work. This turns the various boolean flag parameters to cg_kill(), cg_migrate() and related calls into a single binary flags parameter, simply because the function now gained even more parameters and the parameter listed shouldn't get too long. Logging for killing processes is done either when the kill signal is SIGABRT or SIGKILL, or on explicit request if KILL_TERMINATE_AND_LOG instead of LOG_TERMINATE is passed. This isn't used yet in this patch, but is made use of in a later patch.
104 lines
4.1 KiB
C
104 lines
4.1 KiB
C
/***
|
|
This file is part of systemd.
|
|
|
|
Copyright 2010 Lennart Poettering
|
|
|
|
systemd is free software; you can redistribute it and/or modify it
|
|
under the terms of the GNU Lesser General Public License as published by
|
|
the Free Software Foundation; either version 2.1 of the License, or
|
|
(at your option) any later version.
|
|
|
|
systemd is distributed in the hope that it will be useful, but
|
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Lesser General Public License for more details.
|
|
|
|
You should have received a copy of the GNU Lesser General Public License
|
|
along with systemd; If not, see <http://www.gnu.org/licenses/>.
|
|
***/
|
|
|
|
#include <string.h>
|
|
#include <unistd.h>
|
|
|
|
#include "cgroup-util.h"
|
|
#include "path-util.h"
|
|
#include "string-util.h"
|
|
#include "util.h"
|
|
|
|
int main(int argc, char*argv[]) {
|
|
char *path;
|
|
char *c, *p;
|
|
|
|
assert_se(cg_create(SYSTEMD_CGROUP_CONTROLLER, "/test-a") == 0);
|
|
assert_se(cg_create(SYSTEMD_CGROUP_CONTROLLER, "/test-a") == 0);
|
|
assert_se(cg_create(SYSTEMD_CGROUP_CONTROLLER, "/test-b") == 0);
|
|
assert_se(cg_create(SYSTEMD_CGROUP_CONTROLLER, "/test-b/test-c") == 0);
|
|
assert_se(cg_create_and_attach(SYSTEMD_CGROUP_CONTROLLER, "/test-b", 0) == 0);
|
|
|
|
assert_se(cg_pid_get_path(SYSTEMD_CGROUP_CONTROLLER, getpid(), &path) == 0);
|
|
assert_se(streq(path, "/test-b"));
|
|
free(path);
|
|
|
|
assert_se(cg_attach(SYSTEMD_CGROUP_CONTROLLER, "/test-a", 0) == 0);
|
|
|
|
assert_se(cg_pid_get_path(SYSTEMD_CGROUP_CONTROLLER, getpid(), &path) == 0);
|
|
assert_se(path_equal(path, "/test-a"));
|
|
free(path);
|
|
|
|
assert_se(cg_create_and_attach(SYSTEMD_CGROUP_CONTROLLER, "/test-b/test-d", 0) == 0);
|
|
|
|
assert_se(cg_pid_get_path(SYSTEMD_CGROUP_CONTROLLER, getpid(), &path) == 0);
|
|
assert_se(path_equal(path, "/test-b/test-d"));
|
|
free(path);
|
|
|
|
assert_se(cg_get_path(SYSTEMD_CGROUP_CONTROLLER, "/test-b/test-d", NULL, &path) == 0);
|
|
assert_se(path_equal(path, "/sys/fs/cgroup/systemd/test-b/test-d"));
|
|
free(path);
|
|
|
|
assert_se(cg_is_empty(SYSTEMD_CGROUP_CONTROLLER, "/test-a") > 0);
|
|
assert_se(cg_is_empty(SYSTEMD_CGROUP_CONTROLLER, "/test-b") > 0);
|
|
assert_se(cg_is_empty_recursive(SYSTEMD_CGROUP_CONTROLLER, "/test-a") > 0);
|
|
assert_se(cg_is_empty_recursive(SYSTEMD_CGROUP_CONTROLLER, "/test-b") == 0);
|
|
|
|
assert_se(cg_kill_recursive(SYSTEMD_CGROUP_CONTROLLER, "/test-a", 0, 0, NULL, NULL, NULL) == 0);
|
|
assert_se(cg_kill_recursive(SYSTEMD_CGROUP_CONTROLLER, "/test-b", 0, 0, NULL, NULL, NULL) > 0);
|
|
|
|
assert_se(cg_migrate_recursive(SYSTEMD_CGROUP_CONTROLLER, "/test-b", SYSTEMD_CGROUP_CONTROLLER, "/test-a", 0) > 0);
|
|
|
|
assert_se(cg_is_empty_recursive(SYSTEMD_CGROUP_CONTROLLER, "/test-a") == 0);
|
|
assert_se(cg_is_empty_recursive(SYSTEMD_CGROUP_CONTROLLER, "/test-b") > 0);
|
|
|
|
assert_se(cg_kill_recursive(SYSTEMD_CGROUP_CONTROLLER, "/test-a", 0, 0, NULL, NULL, NULL) > 0);
|
|
assert_se(cg_kill_recursive(SYSTEMD_CGROUP_CONTROLLER, "/test-b", 0, 0, NULL, NULL, NULL) == 0);
|
|
|
|
cg_trim(SYSTEMD_CGROUP_CONTROLLER, "/", false);
|
|
|
|
assert_se(cg_rmdir(SYSTEMD_CGROUP_CONTROLLER, "/test-b") < 0);
|
|
assert_se(cg_rmdir(SYSTEMD_CGROUP_CONTROLLER, "/test-a") >= 0);
|
|
|
|
assert_se(cg_split_spec("foobar:/", &c, &p) == 0);
|
|
assert_se(streq(c, "foobar"));
|
|
assert_se(streq(p, "/"));
|
|
free(c);
|
|
free(p);
|
|
|
|
assert_se(cg_split_spec("foobar:", &c, &p) < 0);
|
|
assert_se(cg_split_spec("foobar:asdfd", &c, &p) < 0);
|
|
assert_se(cg_split_spec(":///", &c, &p) < 0);
|
|
assert_se(cg_split_spec(":", &c, &p) < 0);
|
|
assert_se(cg_split_spec("", &c, &p) < 0);
|
|
assert_se(cg_split_spec("fo/obar:/", &c, &p) < 0);
|
|
|
|
assert_se(cg_split_spec("/", &c, &p) >= 0);
|
|
assert_se(c == NULL);
|
|
assert_se(streq(p, "/"));
|
|
free(p);
|
|
|
|
assert_se(cg_split_spec("foo", &c, &p) >= 0);
|
|
assert_se(streq(c, "foo"));
|
|
assert_se(p == NULL);
|
|
free(c);
|
|
|
|
return 0;
|
|
}
|