父进程从终端读取要执行的命令,并交给子进程执行。父进程等待子进程结束,并打印子进程的返回值。
时间: 2023-06-13 17:05:08 浏览: 225
可以使用`fork()`和`execvp()`系统调用来创建子进程并执行命令,使用`wait()`系统调用来等待子进程结束并获取返回值。
以下是示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
int main() {
char command[100];
// 从终端读取要执行的命令
printf("请输入要执行的命令:");
fgets(command, sizeof(command), stdin);
// 创建子进程
pid_t pid = fork();
if (pid == -1) {
perror("fork error");
exit(1);
} else if (pid == 0) {
// 子进程执行命令
char* args[] = {"sh", "-c", command, NULL};
execvp(args[0], args);
perror("execvp error");
exit(1);
} else {
// 等待子进程结束,并打印返回值
int status;
wait(&status);
if (WIFEXITED(status)) {
printf("子进程返回值:%d\n", WEXITSTATUS(status));
} else if (WIFSIGNALED(status)) {
printf("子进程被信号终止\n");
}
}
return 0;
}
```
注意,这里使用了`sh -c`来执行命令,因为`execvp()`需要传入命令及其参数的数组,而命令本身和参数可能是不确定的,使用`sh -c`可以将命令及其参数作为一个字符串传入。
阅读全文