。) 1. 用fork创建一个子进程,由其调用execve启动shell命令ps查看系统当前进程信息 (1) 程序代码
时间: 2024-10-29 10:18:28 浏览: 24
Linux启动新进程的几种方法及比较
在Unix/Linux环境中,可以使用`fork()`和`execve()`系统调用来创建一个新的子进程并运行 shell 命令。以下是一个简单的 C 语言示例,展示如何实现这个功能:
```c
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <stdlib.h>
#include <string.h>
#define CMD "ps" // 要执行的命令
int main() {
pid_t child_pid; // 子进程ID
char *args[] = {CMD, "-ef", NULL}; // 命令参数数组,这里指定ps -ef选项
if ((child_pid = fork()) == -1) { // 创建子进程
perror("Fork failed");
exit(EXIT_FAILURE);
}
if (child_pid == 0) { // 如果是子进程
execve(args[0], args, environ); // 执行新的程序
perror("Execve failed");
_exit(EXIT_FAILURE);
} else { // 如果是父进程
wait(NULL); // 等待子进程结束
printf("Child process terminated with PID %d\n", child_pid);
}
return 0;
}
```
在这个例子中,首先通过 `fork()` 创建一个新的进程,然后检查返回值。如果子进程(子PID),`execve()` 函数会替换当前进程上下文,使得 `ps -ef` 命令在新进程中执行。如果父进程,它将等待子进程完成,然后打印出子进程终止后的PID。
阅读全文