【问题标题】:finding process id using program name使用程序名称查找进程 ID
【发布时间】:2017-09-14 13:17:01
【问题描述】:

我的程序接收一个字符串(shell 脚本的路径)作为输入。现在我必须启动那个 shell 脚本并找出它的进程 ID。

我使用system() 函数来启动一个shell 脚本,然后使用popen()ps -aef | grep "ShellScript" 来获取它的PID。

有人建议我有更好的方法来做到这一点。如果多个脚本同时运行,我这样做的方式会给出错误的 PID。

在启动后获取给定脚本名称的 PID 的正确方法是什么?

【问题讨论】:

  • "如果同时运行多个脚本会给出错误的PID。"所以你必须处理多个PID?
  • 也许查一下fork()exec()
  • 也许用fork()exec...() 替换system() 是最简单的方法。但是:您目前如何实现目标?通常system() 在脚本完成之前不会返回...
  • 为什么需要获取PID?你会用它做什么?
  • 它为运行多个脚本提供的错误 PID。

标签: c linux unix process pid


【解决方案1】:

首先你不应该使用system()

更好的方法是使用fork(),如果您在父进程中,则返回PID > 0,如果您在子进程中,则返回return 0。 任何其他返回状态都是错误,并相应地设置 errno

当您在子进程中时,您应该exec 您的命令,而如果您想避免出现僵尸进程或处理SIGCHLD 信号,您应该在父进程中为它wait

始终阅读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()");
}

【讨论】:

    猜你喜欢
    • 2015-01-28
    • 1970-01-01
    • 2013-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多