Вернуться назад

argv[0]

execve(path, argv, envp)

execve — это системный вызов ядра Linux. execve – это системный вызов, вызывается из C-кода, через glibc, внутри бинарников.

Формальная сигнатура (из C):

int execve(
    const char *path,
    char *const argv[],
    char *const envp[]
);

Когда я пишу в shell:

firefox
execve("/usr/lib/firefox/firefox", argv, envp);

Если программа запускается вот так:

execve("/usr/lib/firefox/firefox", ["/usr/lib/firefox/firefox"], envp);

... то процесс будет отображаться как /usr/lib/firefox/firefox.

А если вот так:

execve("/usr/lib/firefox/firefox", ["firefox"], envp);

... то процесс будет отображаться как firefox.

Если запустить вот так:

execve("/bin/sleep", ["firefox", "9999"], envp);

... то процесс в ps будет отображаться как firefox 9999, хотя реально исполняется /bin/sleep.

У execve три параметра:

Как в bash управлять argv[0]

передать в argv[0] laja:

exec -a laja /usr/bin/thunar

Теперь проверяем процесс:

ps aux | grep "laja"
   # mark      418054  1.9  0.3 1839244 60444 pts/2   Ssl+ 23:38   0:00 laja
   # mark      418795  0.0  0.0   6648  4288 pts/6    S+   23:39   0:00 grep --color=auto laja

То есть у нас теперь запущен /usr/bin/thunar, но в ps он отображается как laja.