用fork创建一个子进程,由其调用execve启动shell命令ps查看系统当前进程信息
时间: 2024-10-21 07:15:11 浏览: 43
解析如何在C语言中调用shell命令的实现方法
在Unix/Linux操作系统中,你可以使用`fork()`函数创建一个新的子进程,然后通过`execve()`函数替换这个新进程的程序计数器(PC),使其执行指定的shell命令。以下是步骤的一个简单示例,展示如何让子进程运行`ps`命令:
1. **父进程部分**:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
#include <string.h>
int main() {
pid_t child_pid; // 子进程ID
// 创建子进程
if ((child_pid = fork()) == -1) { // fork失败,打印错误并退出
perror("fork failed");
exit(EXIT_FAILURE);
}
if (child_pid == 0) { // 如果是子进程
char *cmd[] = {"ps", "-ef"}; // 定义要执行的命令数组
execve("/bin/ps", cmd, environ); // 执行execve,第一个参数是命令路径,第二个是命令名数组,第三个是环境变量表
perror("execve failed");
_exit(EXIT_FAILURE); // 如果execve失败,直接结束子进程
} else { // 父进程
wait(NULL); // 等待子进程结束
printf("Child process terminated\n");
}
return 0;
}
```
在这个例子中,如果`fork()`成功,那么主进程会进入子进程的上下文,并立即返回0;而子进程会开始执行。`execve()`负责替换子进程的进程映射,使得它变成一个全新的shell进程。
阅读全文