【发布时间】: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。