在linux的环境中,用C编程语言创建子进程,在子进程中执行“ps -A”命令,父进程等待子进程结束后打印“child over”及所处理的子进程ID。
时间: 2025-01-01 12:35:34 浏览: 9
在Linux环境下,使用C语言创建子进程并让其执行特定任务,可以利用`fork()`系统调用。下面是一个简单的步骤来实现这个需求:
1. 首先,你需要包含头文件`unistd.h`和`sys/types.h`,它们包含了必要的函数声明。
```c
#include <unistd.h>
#include <sys/types.h>
```
2. 使用`fork()`创建子进程。如果返回值大于0,则当前进程是父进程;等于0表示是子进程;小于0表示出错,需要检查错误码。
```c
pid_t pid = fork();
if (pid == -1) {
perror("Fork failed");
exit(EXIT_FAILURE);
}
```
3. 在子进程中,执行"ps -A"命令。注意,直接通过`execl()`或`execvp()`家族函数执行shell命令,因为我们要运行外部程序。这里假设`ps`命令在系统的PATH路径下。
```c
if (pid > 0) { // 父进程
// 子进程已经执行,我们继续
} else if (pid == 0) { // 子进程
execlp("/bin/ps", "ps", "-A", NULL); // 执行ps -A
perror("Failed to execute ps command");
_exit(EXIT_FAILURE);
}
```
4. 在父进程中,等待子进程结束。可以使用`waitpid()`或者`wait()`函数,这里以`waitpid()`为例。
```c
pid_t status;
if (waitpid(pid, &status, WUNTRACED) < 0) {
perror("Wait for child failed");
exit(EXIT_FAILURE);
}
```
5. 子进程结束后,父进程检查状态并打印相关信息。
```c
if (WIFEXITED(status)) {
printf("Child %d is over with exit code %d\n", pid, WEXITSTATUS(status));
} else if (WIFSIGNALED(status)) {
printf("Child %d terminated by signal %d\n", pid, WTERMSIG(status));
printf("Child over\n");
}
```
阅读全文