linux环境 调用system()函数启动的进程,如何检测当前进程是否退出
时间: 2024-02-05 09:13:53 浏览: 66
Shell脚本实现检测进程是否正在运行
5星 · 资源好评率100%
在Linux环境中,可以使用waitpid()函数来检测子进程的退出状态。
waitpid()函数的原型如下:
```c
#include <sys/wait.h>
pid_t waitpid(pid_t pid, int *status, int options);
```
其中,pid表示要等待的子进程ID,如果pid为-1,则表示等待任何子进程;status是一个指向整型变量的指针,用于存储子进程的退出状态;options用于设置等待选项。
如果waitpid()函数返回0,则表示子进程正在运行中;如果返回正整数,则表示等待的子进程已经退出,并返回该子进程的ID;如果返回-1,则表示出错,可以通过errno来获取具体错误信息。
在调用system()函数启动子进程后,可以使用waitpid()函数来等待该子进程的退出状态,示例代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
int main()
{
pid_t pid;
int status;
pid = fork();
if (pid < 0) {
printf("fork error!\n");
exit(1);
} else if (pid == 0) {
// 子进程执行命令
system("ls -l");
exit(0);
} else {
// 父进程等待子进程退出
waitpid(pid, &status, 0);
if (WIFEXITED(status)) {
printf("child process exited with status %d\n", WEXITSTATUS(status));
}
}
return 0;
}
```
在上面的示例代码中,父进程调用waitpid()函数等待子进程退出,并通过WIFEXITED()宏来检测子进程的退出状态,如果返回非0,则表示子进程正常退出,并通过WEXITSTATUS()宏来获取子进程的退出状态码。
阅读全文