gpt4 book ai didi

C fork ,返回父进程的 PID 后杀死父进程

转载 作者:行者123 更新时间:2023-12-04 10:43:11 26 4
gpt4 key购买 nike

我是 C 的新手,过去两周我一直在调查 fork,我必须为我的操作系统类(class)解决这个问题:

“您必须使用 fork 创建一个“重量级”进程,然后第一个进程必须等待第二个(新进程)返回其父 ID,然后它必须杀死其父进程并完成”

我认为指令很困惑,这是我到目前为止的代码(正如我所说,我是 C 的新手,所以我一直在调查)
我的问题似乎是父进程甚至没有等待子进程返回其 id,因为在那之后,子进程正在杀死父进程,所以我想我正在创建子进程,当它运行时它会杀死最后,不让父级等待子级执行。 (这是我认为对说明感到困惑的部分)
我想更多地了解 fork 和进程,比如它们背后的逻辑,这样我在编码时就会更有把握。
谢谢!

#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;
}

最佳答案

根据您给出的作业描述,我认为分配它的讲师或教授对英语或 Unix 机器上的进程概念没有很好的掌握。

您提出的解决方案是合理的,但我会删除 sleep 调用。 Childstate 永远不会设置正确,您也不需要全部。此外,不要将 SIGKILL 发送给父级。 SIGKILL 是尝试终止进程的最后一种方式。我建议将 SIGTERM 发送到父进程。如果您使用的是 Linux 机器,父进程可以使用 sigaction 安装信号处理程序。在信号处理程序中,您可以打印一条不错的消息,例如“从子进程接收到终止信号”并调用退出。如果你这样做,你的教授可能会对你的技能印象深刻,给你一个及格的成绩。

如果做不到这一点,我会要求一个更好的问题。在实际解决问题之前,我必须将语法和标点符号的更正提交给教授批准,这种情况并不少见。

关于C fork ,返回父进程的 PID 后杀死父进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15314207/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com