Setting the thread /proc/PID/cmdline?

北城余情 提交于 2019-12-01 09:20:39
miguel.de.icaza

If you want to do this in a portable way, something that will work across multiple Unix variations, there are very few options available.

What you have to do is that your caller process must call exec with the argv [0] argument pointing to the name that you would like to see in the process output, and the filename pointing to the actual executable.

You can try this behavior from the shell by using:

exec -a "This is my cute name" bash

That will replace the current bash process with one named "This is my cute name".

For doing this in C, you can look at the source code of sendmail or any other piece of software that has been ported extensively and find all the variations that are needed across operating systems to support this.

Some operating systems have a setproctitle(3) API, some others allow you to override the contents of argv [0] and show that result.

argv points to writable strings. Just write stuff to them:

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

int
main(int argc, char** argv)
{
    strcpy(argv[0], "Hello, world!");
    sleep(10);
    return 0;
}

Bah.. the code is not that nice, the trick is to reuse the environ (here argv_buffer) pointer:

memset (argv_buffer[0] + len, 0, argv_size - len);
argv_buffer[1] = NULL;

Any better idea?

Is that working for different threads?

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!