У меня проблема, когда я пытаюсь запустить несколько команд через execvp (). Для этого у меня есть цикл while, выполняющий каждую команду, анализирующий ее, затем вызывающий функцию для использования fork + exec.
Проблема в том, что я буду запускать fork + exec и пока я ждуexec, чтобы пройти, родительский процесс запускается и переходит ко второму циклу, т.е. вторая команда. Но, насколько я понимаю, происходит переход дочернего процесса из предыдущего цикла, и внезапно дочерний процесс становится текущим процессом.
Как запустить процесс в дочернем процессе, носохранить контроль над родителем? Все примеры, которые я видел на SO, были для родительских процессов, которые ожидают завершения дочернего процесса, прежде чем продолжить, но у меня нет выбора в этом назначении - я должен оставить дочерние процессы запущенными и проверить позже. чтобы увидеть, работают ли они по-прежнему.
Вот некоторый псевдокод моего мыслительного процесса:
funct forkprocess() {
//call fork
//call execvp within child process, let process run and return control to parent
//if execvp failed, kill child process
//return child pid
}
int main() {
while(not end of file containing list of commands) :
//parse command for execvp call
//call forkprocess() to run process
//if childpid is returned, report it and store pid
//else, report failure
}
}
Мой вывод был близок к следующему:
\\parent PID is printed
\\any code outside the if-else ladder for fork is printed
\\it jumps back to main and prints any statements there
[jumps to next iteration in loop, ie. the next command]
\\child PID is printed
\\parent PID is printed
\\any code outside the if-else ladder for fork is printed
\\it jumps back to main and prints any statements there
\\child PID is printed