我想要一段完整的linux下可运行的包含exec、wait、fork、exit函数的进程控制编程代码
时间: 2023-11-29 21:04:53 浏览: 141
【Linux】进程二 (PCB & fork/vfork & wait/waitpid & exit/_exit & exec函数族 & 环境变量)
5星 · 资源好评率100%
下面是一个包含exec、wait、fork、exit函数的进程控制编程代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
int main()
{
pid_t child_pid;
int status;
child_pid = fork(); // 创建子进程
if (child_pid == -1) // fork 失败
{
perror("fork");
exit(EXIT_FAILURE);
}
if (child_pid == 0) // 子进程
{
printf("I am the child process, PID=%d\n", getpid());
char *args[] = {"ls", "-l", NULL}; // exec 的参数列表
execvp(args[0], args); // 执行 ls 命令
// 如果 execvp 返回,则表示执行失败
perror("execvp");
exit(EXIT_FAILURE);
}
else // 父进程
{
printf("I am the parent process, PID=%d\n", getpid());
waitpid(child_pid, &status, 0); // 等待子进程结束
if (WIFEXITED(status)) // 如果子进程正常结束
{
printf("Child process exited with status %d.\n", WEXITSTATUS(status));
}
else if (WIFSIGNALED(status)) // 如果子进程被信号终止
{
printf("Child process terminated by signal %d.\n", WTERMSIG(status));
}
}
return 0;
}
```
在这个示例中,父进程调用 fork() 函数创建一个子进程,然后在子进程中调用 execvp() 函数执行 ls 命令。父进程等待子进程结束,并根据子进程的退出状态打印相应的信息。注意,如果 execvp() 函数执行成功,则子进程将被替换为新的程序,这意味着子进程不会继续执行原有的代码。
阅读全文