我正在尝试从现有流程创建新流程。
就像parentMain进程创建了childMain进程一样。
我的目标是: 1)两个过程都将继续运行(意味着没有人应该等待另一个完成) 2)创建者 - parentMain进程应该向创建的进程发送消息 - childMain进程。
我不知道新的childMain进程何时准备就绪。我不能使用等待功能,因为我知道等待直到 孩子的过程应该结束,但我的目标是它会继续运行。
经过一番谷歌搜索后,我正在使用fork& exec家族的功能如下:
void parentMain::CreateAndSend()
{
createNewProcess();
sendMessage();
}
void parentMain::createNewProcess()
{
char* param1[10] = "param1";
// Create new process.
cpid = fork();
if (cpid >= 0) // fork() succeeded.
{
if (cpid == 0) // 0 for child process.
{
execl("/home/kon/childMain", "/home/kon/childMain", param1, (char*)0);
}
else /* parent process */
{
printf("Parent process, parent PID=%d child PID=%d, getpid(), cpid);
}
}
else // fork() failed.
{
printf("Failure");
}
}
void parentMain::sendMessage()
{
Y = 50; // milliseconds.
nanosleep(Y);
?? isChildReady ??
sendChildMessage();
}
现在,有时sendMessage()会失败! 如果我使用睡眠(X)它成功了。 (很快) 但我希望尽可能减少时间。 创建流程需要多长时间? 是否有任何功能说"孩子准备就绪"? 我该怎么办?
由于