UNIX, откуда взялись все эти вещи exec
, отделил исполняемый файл программы от имени программы, чтобы ваш процесс мог иметь произвольное имя.
Первый аргумент - это программа , которая будет работать. Это должно существовать. Следующим аргументом будет то, что ваш процесс, выполняющий программу, будет вызываться, , что будет в argv[0]
, и что появится в выводе ps
(список процессов).
Итак, если я это сделал (в C, но он также отображается на Python):
execl ("/usr/bin/sleep", "notsleep", "60", NULL);
Это запустит программу /usr/bin/sleep
, но будет отображаться в списке процессов как notsleep
. argv[0]
будет notsleep
, а argv[1]
(фактический аргумент) будет 60. Часто первые два параметра будут идентичны, но это ни в коем случае не требуется.
Вот почему первый аргумент вашего списка (по-видимому) игнорируется. Это имя для процесса, не первый аргумент для него.
Более правильный способ сделать это будет:
os.execv('/bin/echo', ['echo', 'foo', 'bar'])