У меня есть программа, которая должна запустить другой процесс и работать одновременно с ним. Я использую fork()
и system()
, чтобы выполнить это. У меня есть код, подтверждающий, что мой вызов system()
возвращает, но каждый раз, когда я выполняю это, я должен вручную завершить выполнение, набрав ctrl c
. Я могу сказать, что один из моих процессов завершается, но я не совсем уверен, какой из них. Я считаю, что это родитель. Оба должны быть пойманы возвратными заявлениями.Почему мне приходится прерывать свою программу вручную?
Вот родительский процесс код (forkWaitTest):
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
int main(void)
{
pid_t childPID;
int status;
childPID = fork();
if(childPID >=0)
{
if(childPID == 0)
{
cout <<"I'm the fork child";
cout.flush();
status=system("child");
cout << "status = " << status;
//exit(0);
//cout << "Am I getting here?";
}
else{
cout << "I am the parent and can keep doing things ";
int y=1;
int x=7;
cout<< y+x << " ";
}
}
return 0;
}
Это дочерний процесс, который называется
#include <stdio.h>
int main(int argc, char *argv[])
{
printf("I am the child\n");
return 0;
}
Вот мой результат:
-bash-4.2$ forkWaitTest
I am the parent and can keep doing things 8 I'm the fork child-bash-4.2$ I am the child
status = 0
Как вы определили, что что-то «никогда не заканчивается»? –
Я должен нажать 'ctrl c', чтобы закончить его – art3m1sm00n
Ваш родитель должен быть' wait() 'ing для дочернего элемента, хотя, по общему признанию, я не могу сразу понять, почему это не приведет к поведению. – abligh