用Linux创建两个进程( 参考fork, wait, waitpid, exec 函数集),在子进程中完成如下要求:(1)创建一个用户,赋予相应权限 在主进程完成如下要求: (1)显示“这是主进程! 注:子进程也可以通过shell脚本先完成,然后调用运行该文件。注意子进程先结束,再主进程结束(使用wait or waitpid)。
时间: 2024-03-15 11:46:45 浏览: 58
好的,以下是代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
int main() {
pid_t pid = fork();
if (pid == -1) {
printf("进程创建失败\n");
exit(EXIT_FAILURE);
} else if (pid == 0) { // 子进程
char *args[] = {"./create_user.sh", NULL};
execvp(args[0], args);
printf("子进程创建用户失败\n");
exit(EXIT_FAILURE);
} else { // 主进程
printf("这是主进程,进程ID为%d\n", getpid());
waitpid(pid, NULL, 0);
printf("子进程已经成功创建用户\n");
}
return 0;
}
```
在这个程序中,使用fork函数创建了一个子进程。子进程中使用execvp函数调用了一个名为create_user.sh的shell脚本,该脚本中包含了创建用户的命令和赋予权限的操作。在主进程中使用waitpid函数等待子进程结束,然后输出成功创建用户的信息。
注意,在调用execvp函数时,第一个参数是要执行的命令或脚本文件的路径,第二个参数是要传给该命令或脚本的参数,最后一个参数必须为NULL。
另外,在子进程中,如果execvp函数执行失败,则会输出一条错误信息,然后使用exit(EXIT_FAILURE)函数退出进程。在主进程中,如果waitpid函数执行失败,则会输出一条错误信息。
希望这个程序可以满足您的需求!
阅读全文