execvp()
функция ожидает ровно два аргумента, имя двоичного кода для выполнения и NULL
- перечеркнутый массив указателей на аргументы команды. Передача большего количества аргументов приводит к неопределенному поведению. Передача аргументов типов, отличных от ожидаемых, может компилироваться, но, вероятно, не имеет желаемого результата.
Итак, если вы хотите взять существующий массив аргументов и добавить другой аргумент, вам нужно будет сделать копию с пространством для дополнительного элемента. Также обратите внимание, что '&' является литералом char
, а не строковым литералом. Различие огромно.
С учетом всего сказанного, я наблюдаю, как и другие делали, что дает «&» в качестве аргумента программы будет не есть результат выполнения программы в фоновом режиме, и в более общем плане, что execvp()
и другое Функции exec-family могут не иметь такого поведения, которое вы ожидаете. В частности, имейте в виду, что функции exec обычно не возвращаются. Обычно один из fork()
s первый и выполняет exec в дочернем процессе, который по сути обеспечивает поведение фонового процесса.
В качестве альтернативы, возможно, вы найдете функцию system()
более удобной, так как она использует оболочку для запуска указанной вами команды.
'&' не является аргументом, а анализируется оболочкой. – user4098326
Для ясности, если вы делаете это для фонового режима, тогда '&' не является аргументом для программы. Его разбирает оболочка вашего (например, bash) и эквивалентна первому вызову 'fork()'. Возможно, посмотрите: http://www.cs.ecu.edu/karl/4630/sum01/example1.html –