c - 使用程序名称查找进程 ID

标签 c linux unix process pid

我的程序接收一个字符串(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/

相关文章:

c - 修改常量变量(const)

c - 以下是什么意思。 C 语言中符号类型的二进制表示?

linux - 尝试使用 grep 匹配同一行上的多个模式

python - 多个进程异步读取同一管道

c++ - Boost 插件选择

c - 需要帮助解决仅在 Linux 中发生的段错误

c - 宏和后增量

linux - 在 FreeBSD UFS/MacOS X HFS 下更改文件的 ctime

regex - 用于在文件中每行(不包含句号)末尾添加句号的 Shell 脚本

c - C语言中的素数