Да, оболочка разветвит скрипт и немедленно вернется, но у вас нет простого способа узнать, как и закончился ли скрипт.
«Правильный» способ выполнить такую асинхронную команду: fork(2)
ваш процесс, вызовите execve(2)
в дочернем файле с двоичным файлом, установленным в /bin/sh
, и одним из аргументов, указанным в имени вашего скрипта. и периодически опросите дочерний элемент от родителя с помощью системного вызова waitpid(2)
с параметром WNOHANG
. Когда waitpid
возвращает -1, вы знаете, что скрипт завершился, и вы можете получить его код возврата.
Фактически, то, что делает system(3)
, почти то же самое, за исключением того, что вызов waitpid
блокируется, пока процесс не завершится.