编写一段程序,使用系统调用fork()来创建一个子进程。子进程通过系统调用execvp()更换自己的执行代码,新的代码显示“new program.”。而父进程则调用wait()等待子进程结束,并在子进程结束后显示子进程的标识符,然后正常结束
时间: 2024-12-17 11:52:09 浏览: 16
在Unix/Linux环境中,你可以编写如下的C语言程序来实现这个功能:
```c
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
#define NEW_PROGRAM "echo new program."
int main(int argc, char *argv[]) {
pid_t child_pid; // 子进程ID
// 创建子进程
if ((child_pid = fork()) == -1) { // fork失败返回-1
perror("Fork failed");
return 1;
}
if (child_pid == 0) { // 子进程
// 使用execvp替换当前执行文件
if (execlp(NEW_PROGRAM, NEW_PROGRAM, NULL) == -1) {
perror("Execvp failed");
_exit(EXIT_FAILURE);
}
} else { // 父进程
printf("Child process ID: %d\n", child_pid); // 显示子进程ID
wait(NULL); // 等待子进程结束
printf("Parent process ended.\n");
}
return 0;
}
```
在这个程序中,`fork()`用于创建子进程,如果成功,返回的是子进程ID;如果失败,返回-1并设置errno。子进程部分使用`execlp()`函数替换自身的执行路径为指定的"new program.",如果执行失败会退出。父进程部分打印子进程ID后,使用`wait()`等待子进程结束,然后正常退出。
运行这个程序时,你会看到子进程输出"new program.",父进程显示子进程ID,随后父进程结束。
阅读全文