改写以下代码,在子程序中用函数system 启动一个较长时间运行的任务,而在父进程 中执行完成任务后,应用 waitpid 函数等待子进程,子进程退出后父进程才退出, #include<stdio.h> #include<unistd.h> #include<sys/types.h> #include<sys/wait.h> int main pid t pid, wpid; int status, i; pid=fork() if (pid==0) printf("这是子进程,进程号(pid)是:gdln", getpid(); sleep (5) ; /*子进程等待 5秒钟*/ exit (6): else printf("这是父进程,正在等待子进程……• wpid-wait (&status);/*父进程调用 wait 函数,消
时间: 2023-06-06 09:06:25 浏览: 122
以下是改写后的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
void runLongTask() {
system("long_task.sh");
}
int main() {
int status;
pid_t pid = fork();
if (pid == -1) {
printf("Failed to fork.\n");
exit(1);
} else if (pid == 0) {
runLongTask();
exit(0);
} else {
waitpid(pid, &status, 0);
if (WIFEXITED(status)) {
printf("Child process exited with status %d.\n", WEXITSTATUS(status));
}
printf("Parent process finished.\n");
}
return 0;
}
```
其中,`runLongTask` 函数用于启动一个比较长时间运行的任务,其实现方式是调用系统命令 `long_task.sh`。在 `main` 函数中,首先调用 `fork` 创建子进程,如果出错则直接退出程序。在子进程中调用 `runLongTask` 函数运行任务并退出,而在父进程中使用 `waitpid` 函数等待子进程结束。当子进程结束后,父进程通过 `WIFEXITED` 宏判断子进程是否正常退出,如果是则输出子进程的退出状态码,并输出“Parent process finished.”。程序最后返回 0。