(1)用fork()创建一个进程,再调用exec()用新的程序替换该子进程的内容。 (2)利用wait()来控制进程执行顺序。
时间: 2024-02-27 12:53:32 浏览: 88
(1) 用fork()创建一个进程并调用exec()来替换该子进程的内容:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
int main() {
pid_t pid = fork();
if (pid == 0) {
// 子进程
printf("子进程:%d\n", getpid());
char *args[] = {"ls", "-l", NULL};
execvp("ls", args); // 用ls命令替换子进程的内容
} else if (pid > 0) {
// 父进程
printf("父进程:%d\n", getpid());
wait(NULL); // 等待子进程结束
printf("子进程结束\n");
} else {
// 创建子进程失败
printf("创建子进程失败\n");
exit(1);
}
return 0;
}
```
(2) 利用wait()来控制进程执行顺序:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
int main() {
pid_t pid1, pid2;
int status;
pid1 = fork();
if (pid1 == 0) {
// 子进程1
printf("子进程1:%d\n", getpid());
sleep(2); // 等待2秒
printf("子进程1结束\n");
exit(0);
} else if (pid1 > 0) {
// 父进程
printf("父进程:%d\n", getpid());
pid2 = fork();
if (pid2 == 0) {
// 子进程2
printf("子进程2:%d\n", getpid());
sleep(1); // 等待1秒
printf("子进程2结束\n");
exit(0);
} else if (pid2 > 0) {
// 父进程
waitpid(pid1, &status, 0); // 等待子进程1结束
waitpid(pid2, &status, 0); // 等待子进程2结束
printf("父进程结束\n");
} else {
// 创建子进程2失败
printf("创建子进程2失败\n");
exit(1);
}
} else {
// 创建子进程1失败
printf("创建子进程1失败\n");
exit(1);
}
return 0;
}
```
在这个例子中,父进程先创建子进程1,然后创建子进程2。父进程利用waitpid()函数来等待子进程1和子进程2的结束。由于子进程1需要等待2秒钟才能结束,而子进程2只需要等待1秒钟,因此等待子进程1结束的时间比等待子进程2结束的时间要长。这样就保证了子进程1先结束,然后是子进程2,最后是父进程。
阅读全文