diff options
-rw-r--r-- | src/basic/process-util.c | 32 | ||||
-rw-r--r-- | src/basic/process-util.h | 2 | ||||
-rw-r--r-- | src/basic/util.c | 31 |
3 files changed, 34 insertions, 31 deletions
diff --git a/src/basic/process-util.c b/src/basic/process-util.c index c534656c97..31951cdd4f 100644 --- a/src/basic/process-util.c +++ b/src/basic/process-util.c @@ -24,6 +24,7 @@ #include <stdbool.h> #include <stdio.h> #include <string.h> +#include <sys/prctl.h> #include <sys/types.h> #include <sys/wait.h> #include <unistd.h> @@ -180,6 +181,37 @@ int get_process_cmdline(pid_t pid, size_t max_length, bool comm_fallback, char * return 0; } +void rename_process(const char name[8]) { + assert(name); + + /* This is a like a poor man's setproctitle(). It changes the + * comm field, argv[0], and also the glibc's internally used + * name of the process. For the first one a limit of 16 chars + * applies, to the second one usually one of 10 (i.e. length + * of "/sbin/init"), to the third one one of 7 (i.e. length of + * "systemd"). If you pass a longer string it will be + * truncated */ + + prctl(PR_SET_NAME, name); + + if (program_invocation_name) + strncpy(program_invocation_name, name, strlen(program_invocation_name)); + + if (saved_argc > 0) { + int i; + + if (saved_argv[0]) + strncpy(saved_argv[0], name, strlen(saved_argv[0])); + + for (i = 1; i < saved_argc; i++) { + if (!saved_argv[i]) + break; + + memzero(saved_argv[i], strlen(saved_argv[i])); + } + } +} + int is_kernel_thread(pid_t pid) { const char *p; size_t count; diff --git a/src/basic/process-util.h b/src/basic/process-util.h index db32a34ef3..31f760981e 100644 --- a/src/basic/process-util.h +++ b/src/basic/process-util.h @@ -60,8 +60,10 @@ void sigkill_wait(pid_t *pid); int kill_and_sigcont(pid_t pid, int sig); pid_t get_parent_of_pid(pid_t pid, pid_t *ppid); + void rename_process(const char name[8]); int is_kernel_thread(pid_t pid); + int getenv_for_pid(pid_t pid, const char *field, char **_value); bool pid_is_alive(pid_t pid); diff --git a/src/basic/util.c b/src/basic/util.c index da7de27a04..2451da3658 100644 --- a/src/basic/util.c +++ b/src/basic/util.c @@ -125,37 +125,6 @@ size_t page_size(void) { return pgsz; } -void rename_process(const char name[8]) { - assert(name); - - /* This is a like a poor man's setproctitle(). It changes the - * comm field, argv[0], and also the glibc's internally used - * name of the process. For the first one a limit of 16 chars - * applies, to the second one usually one of 10 (i.e. length - * of "/sbin/init"), to the third one one of 7 (i.e. length of - * "systemd"). If you pass a longer string it will be - * truncated */ - - prctl(PR_SET_NAME, name); - - if (program_invocation_name) - strncpy(program_invocation_name, name, strlen(program_invocation_name)); - - if (saved_argc > 0) { - int i; - - if (saved_argv[0]) - strncpy(saved_argv[0], name, strlen(saved_argv[0])); - - for (i = 1; i < saved_argc; i++) { - if (!saved_argv[i]) - break; - - memzero(saved_argv[i], strlen(saved_argv[i])); - } - } -} - noreturn void freeze(void) { /* Make sure nobody waits for us on a socket anymore */ |