LINUX.ORG.RU

Изменение имени процесса в списке


0

1

Собственно вопрос, как сделать чтобы в PS вместо

user     PID  0.0  0.0   1700   316 pts/3    S+   17:20   0:00 process --param

Отображалось что-то вроде

user     PID  0.0  0.0   1700   316 pts/3    S+   17:20   0:00 mycoolprocessname

Пока додумался только до замены argv[0], но что-то мне кажется что это далеко не оптимальный способ.

#include <signal.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>

char tmps[256];
char *vp = NULL;

void sghdl(int s) {
        if(s == SIGUSR1) strncpy(vp,tmps,255);
}

void pcaption(pid_t pid, char *vpf, const char *caption) {
        strncpy(tmps,caption,255);
        vp = vpf;
        kill(pid, SIGUSR1);
}

int main(int c, char **v) {
        pid_t cpid, ppid;
        signal(SIGUSR1, &sghdl);
        cpid = fork();
        if(cpid == 0) {
                ppid = getpid();
                pcaption(ppid, v[0], "<child>");
                sleep(20);
        } else {
                ppid = getpid();
                pcaption(ppid, v[0], "<parent>");
                wait();
        }

}

prctl(PR_SET_NAME,... ещё есть.

anonymous ()
Ответ на: комментарий от svr4

The name can be up to 16 bytes long

А чего хотел, коли /proc/../comm ограничен в длину, pgrep, например, не находит процесс если указать полное имя (а не 15-16 байт). Если нужно менять /proc/../cmdline - то непортабельно argv[] или можно найти для linux обертку setproctitle.c

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.