【发布时间】:2013-03-09 18:16:59
【问题描述】:
我是 C 新手,过去两周我一直在调查 forks,我必须为我的操作系统课程解决这个问题:
“你必须使用fork创建一个“重量级”进程,然后第一个进程必须等待第二个(新的)返回它的父ID,然后它必须杀死它的父并完成”
我认为说明很混乱,这是我目前的代码(正如我所说,我是 C 新手,所以我一直在调查) 我的问题似乎是父进程甚至没有等待子进程返回其 ID,因为在那之后,子进程正在杀死父进程,所以我想我正在创建子进程,当它运行时它会杀死父母最后,不让父母等待孩子执行。 (这是我认为对说明感到困惑的部分) 我想了解更多关于分叉和流程的信息,比如它们背后的逻辑,以便在编码时更有把握。 谢谢!
#include <sys/types.h>
#include <wait.h>
#include <unistd.h>
#include <stdio.h>
int main() {
pid_t idProceso;
int childState;
idProceso = fork();
if (idProceso == 0){
printf ("child id : %d. parent id %d\n",
getpid(), getppid());
int parent = getppid();
kill(parent, SIGKILL);
printf ("dead parent"); // not sure about it ??
_exit();
}
if(idProceso > 0){
sleep (1);
printf ("parent id : %d. child id %d\n",
getpid(), idProceso);
wait (&childState);
}
return 0;
}
【问题讨论】:
-
说实话,这句话——即使读了两遍——对我来说也没有任何意义。在所有情况下,我都可以认为被杀死的进程已经退出。
-
我不明白你应该做什么,但父母不等待的原因是因为它启动了
sleep,但孩子设置为立即杀死它,所以这样做。 -
你们说的都对,我的意思是,我觉得这句话很混乱,但老师是这样给我们的。就像: - 创建一个进程 - 创建一个子进程 - 父进程等待子进程 - 子进程杀死父进程(这是我很困惑的部分)并且它完成了