gpt4 book ai didi

在 C/UNIX 中创建子进程/杀死进程

转载 作者:行者123 更新时间:2023-12-04 11:47:29 24 4
gpt4 key购买 nike

所以我今天一直在做这件事,我很确定我已经接近了,但我仍然对如何终止子进程以及我是否正确地完成了这项任务感到困惑。问题描述如下:

Write a UNIX program that creates a child process that 
prints a greeting, sleeps for 20 seconds, then exits.
The parent process should print a greeting before creating
the child, and another after the child has terminated. It
should then terminate.

这是我的代码:

#include <sys/wait.h>
#include <stdio.h>
#include <stdlib.h>


int main()
{
int child;

printf("Parent Greeting\n");
child = fork();
if(child >= 0)
{
if(child == 0)
{
printf("Child process\n");
sleep(2);
printf("Child exiting\n");
exit(0);
}
}
else
{
printf("Failed\n");
}
printf("End");
exit(1);
return 0;
}

我遇到的问题是如何正确终止子进程。如果我将退出语句注释掉,那么 child 将运行、等待,然后打印“结束”语句。如果我有 exit 语句,那么子进程会说它正在退出,程序会一直等待,直到我 ctrl+c 退出。任何帮助将不胜感激,因为我对这个话题很感兴趣,但有点困惑:)谢谢!

最佳答案

您不必从父进程中终止子进程;它应该自行终止(并在 sleep()printf()exit() 之后终止)。父进程应该wait() or waitpid()让 child 在打印 "End" 消息之前死去。此外,您的 "End\n" 消息应包含换行符。

不需要 exit(1);(在第一个程序的末尾);它表示失败。 exit() 函数不返回,所以 return 是多余的。但最好删除 exit() 并保留 return 0; 表示成功。

(请注意,子项应该包含对 exit() 的调用,其值可能为 0 而不是修改后的代码中的 1。毕竟,它已成功完成其工作。)

关于在 C/UNIX 中创建子进程/杀死进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12336351/

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