编写一段程序,使用系统调用fork()来创建一个子进程。 子进程通过系统调用exec()更换自己的执行代码,新的代码显示“new program.”后, 调用exit()函数结束。父进程则调用waitpid()等待子进程结束,并在子进程结束后, 显示子进程的标识符然后正常结束。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
int main() {
pid_t pid;
// 创建子进程
pid = fork();
if (pid == 0) {
// 子进程
printf("Child process: PID = %d\n", getpid());
// 使用exec()替换子进程的执行代码
execl("/bin/echo", "echo", "new program.", NULL);
// 如果exec()执行失败,则打印错误信息
perror("exec");
exit(EXIT_FAILURE);
} else if (pid > 0) {
// 父进程
int status;
// 等待子进程结束
waitpid(pid, &status, 0);
if (WIFEXITED(status)) {
printf("Child process %d exited normally.\n", pid);
} else {
printf("Child process %d exited abnormally.\n", pid);
}
} else {
// fork失败
perror("fork");
exit(EXIT_FAILURE);
}
return 0;
}