创建一个子进程,并使用execv()给它加载程序,其功能是调用键盘命令ps –a.已知键盘
时间: 2024-02-01 08:17:00 浏览: 41
命令ps -a对应的可执行文件为/bin/ps,可以通过以下代码创建子进程并调用execv()加载程序实现:
```c
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main() {
pid_t pid = fork(); // 创建子进程
if (pid < 0) { // 创建失败
perror("fork");
exit(EXIT_FAILURE);
} else if (pid == 0) { // 子进程
char* args[] = {"/bin/ps", "-a", NULL}; // 构造参数列表
execv(args[0], args); // 加载程序
perror("execv"); // 如果execv返回,说明加载失败
exit(EXIT_FAILURE);
} else { // 父进程
// 等待子进程结束
int status;
waitpid(pid, &status, 0);
if (WIFEXITED(status)) {
printf("子进程已退出,退出状态码:%d\n", WEXITSTATUS(status));
}
}
return 0;
}
```
其中,fork()函数用于创建子进程,子进程中通过char* args[]构造参数列表,其中第一个参数为可执行文件的路径,第二个参数为命令行参数,最后一个参数必须为NULL。在子进程中,调用execv(args[0], args)加载程序/bin/ps,并用perror()输出错误信息(如果有的话),如果execv返回,说明加载失败,子进程通过exit()退出。在父进程中,使用waitpid()函数等待子进程结束,如果子进程正常退出(WIFEXITED(status)为真),则输出退出状态码。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)