我的程序接收一个字符串(shell 脚本的路径)作为输入。现在我必须启动该 shell 脚本并找出它的进程 ID。
我使用 system()
函数启动 shell 脚本,然后使用 popen()
和 ps -aef | grep "ShellScript"
来获取其 PID。
有人向我建议有更好的方法来做到这一点。如果同时运行多个脚本,我的方法会给出错误的 PID。
启动给定脚本名称后获取 PID 的正确方法是什么?
最佳答案
首先你不应该使用system()
。
更好的方法是使用 fork()
,如果您位于父进程中,它会返回 PID
> 0,并且 return
0如果你在 child 身上。
任何其他返回状态都是错误,并相应地设置 errno 。
当您处于子进程中时,您应该exec
您的命令,而如果您想避免僵尸进程,您应该在父进程中wait
等待它处理或处理 SIGCHLD
信号。
始终阅读man
以获得更好的洞察力。
这是一个简短的示例
int pid = -1;
If((pid = fork()) > 0)
{
/* Parent process*/
wait(NULL);
}
else if(pid == 0)
{
/*Child process*/
execv(....);
exit (0);
}
else
{
/*Error*/
perror("fork()");
}
关于c - 使用程序名称查找进程 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46220235/