Как установить аргументы командной строки в программе на C, чтобы она была видна, когда пользователи вводят «ps aux»? - PullRequest
5 голосов
/ 21 сентября 2010

Когда вы набираете «ps aux», команда ps показывает аргументы команды, с которыми запускалась программа.Некоторые программы изменяют это как способ указания статуса.Я попытался изменить поля argv [], и это не похоже на работу.Есть ли стандартный способ установить аргументы командной строки, чтобы они появлялись, когда пользователь вводит ps?

То есть это не работает:

int main(int argc,char **argv)
{
    argv[0] = "Hi Mom!";
    sleep(100);
}

09:40 imac3:~$ ./x &
[2] 96087
09:40 imac3:~$ ps uxp 96087 
USER      PID  %CPU %MEM      VSZ    RSS   TT  STAT STARTED      TIME COMMAND
yv32      96087   0.0  0.0  2426560    324 s001  S     9:40AM   0:00.00 ./x
09:40 imac3:~$ cat x.c

1 Ответ

5 голосов
/ 21 сентября 2010

У вас была правильная идея, но вы не меняете указатели в argv[n], вы должны изменить строку, на которую указывает argv[0]:

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

int main(int argc,char **argv)
{
    size_t maxlen = strlen(argv[0]);

    memset(argv[0], 0, maxlen);
    strncat(argv[0], "Hi Mom!", maxlen);
    pause();

    return 0;
}

(Обратите внимание, что действительно ли это меняет имя команды, обозначенное ps, зависит от системы).

...