Sti*_*Sti 3 c unix sleep fork process
告诉特定进程睡眠的正确方法是什么?我不完全了解如何控制我创建的不同进程..
我正在尝试制作两个睡眠时间为2和3秒的进程.当进程1已经睡眠2秒,并且进程2仍处于休眠状态时,我希望进程3开始睡眠.但是我怎么告诉一个进程睡觉呢?或者不是吗?
int main(void)
{
pid_t p1 = fork();
pid_t p2 = fork();
pid_t p3 = fork();
//make p1 sleep(2) and p2 sleep(3)
waitpid(p1, NULL, 0); //waiting for p1 to terminate
//make p3 sleep(2);
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我不明白如何处理流程,或者它们到底是什么.我有点把它们视为对象,但我猜这是错的..我已经尝试过读一些关于它的东西了,但是它们都是9000多页的PDF文件.我应该看到它们的简单解释. .是的,这是学校教材,但不,这不是作业.
我想你可以先发送一个SIGSTOP,然后再发送一个。SIGCONT
kill(p1, SIGSTOP);
Run Code Online (Sandbox Code Playgroud)
或者,更明智的是,由于您只是分叉,因此可以完全控制代码,因此您可以处理路径:
if (in_child_1)
sleep(..);
Run Code Online (Sandbox Code Playgroud)
附带说明一下,在您的代码中创建的进程比您预期的要多。事情是一旦p1创建,它就会从该点开始执行,与其父级并行。等等。
从一开始man fork略短于9000页.主要的是成功fork返回两次:它向子进程返回0,子进程返回父进程的PID.它通常像这样使用:
pid_t pid = fork();
if (pid<0) { /* error while forking */
};
if (!pid) { /* code for child */
play();
whine();
sleep();
exit(0);
} else { /* code for parent */
grunt();
waitpid(...);
}
Run Code Online (Sandbox Code Playgroud)
您通常不会告诉子进程执行此操作,您只需将代码添加到相应的if分支.
在您的示例中,如果所有分支都成功,则最终会有8个进程:
p1在新进程中获取0,在父进程中获得一些pid.p2在所有"孙子"中获得0,在步骤2之前存在的2个过程中获得两个不同的pid.