execl 中函数执行一次后就不在执行怎么设置
时间: 2024-01-20 10:01:52 浏览: 34
在 `exec` 函数中,当执行成功后,调用进程就会被替换为新程序,旧程序的代码段、数据段、堆栈等全部被新程序所替代,因此原来的程序代码不会再被执行。
如果你想在执行 `exec` 函数后继续执行原来程序的代码,可以在 `exec` 函数前先用 `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) {
perror("fork error");
exit(-1);
} else if (pid == 0) {
// 子进程中执行 exec 函数
execl("/bin/ls", "ls", "-l", NULL);
perror("exec error");
exit(-1);
} else {
// 父进程继续执行原来的代码
printf("parent process continue...\n");
wait(NULL); // 等待子进程结束
}
return 0;
}
```
在上面的示例代码中,父进程先调用了 `fork` 函数创建了子进程,然后在子进程中执行了 `execl` 函数,输出了文件列表后子进程就结束了。父进程则在子进程结束后继续执行了原来的代码,并在最后调用了 `wait` 函数等待子进程结束。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)