【问题标题】:Linux get pid of program launched via script with execlLinux获取通过带有execl的脚本启动的程序的pid
【发布时间】:2018-02-11 10:38:48
【问题描述】:

我有一段代码可以将另一个程序作为子进程启动。

pid = execlp("path-to/program", "path-to/program", nullptr);

这会返回我启动的进程的 pid,以便我可以访问它。现在我们需要通过 shell 脚本启动一个进程。像这样:

#!/bin/bash
export LD_LIBRARY_PATH=/path-to/program
/path-to/program
#or:
wine /path-to/program.exe

C++:

pid = execlp("/path-to/shelscript.sh", "/path-to/shellscript.sh", nullptr);

当我现在调用 execl 时,它将返回 shell 的 pid,而不是已启动进程的 pid。我可以检查程序的路径是否包含“.sh”并将 pid 加一,但这并不总是有效。有没有更清洁、更可靠的方法来做到这一点?

【问题讨论】:

  • 您是否可以控制已启动的脚本(您可以更改它们的代码)吗?
  • 是的,这是可能的
  • 你可以考虑基于文件/管道的通信。但是到目前为止,我可以看到一切都按顺序执行,您需要 pid 做什么?
  • 我必须使用 process_vm_writev / process_vm_readv 访问进程
  • execlp 不会返回(除非出现错误)它会替换进程。你可能需要fork

标签: c++ linux shell pid


【解决方案1】:

如果您在 shell 脚本中启动进程,变量 $! 包含刚刚创建的进程的 pid。你可以例如使用 echo 输出它并使用 popen() 启动 shell 脚本并从那里读取 pid。

【讨论】:

    猜你喜欢
    • 2016-12-26
    • 2012-09-20
    • 1970-01-01
    • 1970-01-01
    • 2021-08-19
    • 1970-01-01
    • 2017-11-03
    • 2012-10-23
    • 2011-07-11
    相关资源
    最近更新 更多