【问题标题】:Get Process Id of launched Prompt from C++ Executable从 C++ 可执行文件获取已启动提示的进程 ID
【发布时间】:2016-10-10 12:39:07
【问题描述】:

使用 C++ Boost 我正在创建一个命令行应用程序。 出于某种原因,我需要启动可执行文件的命令提示符的 PID。 可执行文件是用 C++ 和 boost 编写的,并内置在 eclipse IDE 中

【问题讨论】:

  • 问题是,代码如何获取它正在执行的进程的PID?还是关于其他一些程序获取它启动的进程的PID?还是关于其他一些程序获取独立启动的程序 Xyz 实例的 PID?请对这里的场景更清楚一点。
  • “提示”不是进程,因此它没有 PID。您要识别什么进程
  • 我正在打开一个命令提示符,然后通过转到该路径执行 exe 文件。因此,在这种情况下,它不是提示,而是在 cmd 上运行的 cmd.exe 进程,该进程已打开并显示在 taskmanager @HarryJohnston
  • 正确@Cheersandhth.-Alf 我不能正确地问这个问题,但你说得对。
  • 有一个从命令提示符启动的程序可执行文件,所以我需要启动它的命令提示符的 PID。 @Cheersandhth.-阿尔夫

标签: c++ windows boost


【解决方案1】:

您的应用程序无法知道创建它的进程的 PID。

如果您正在寻找当前进程的 PID,请查看 ms c++ get pid of current process(因为您显然是在 Windows 上运行)。

如果您正在寻找父进程的PID,唯一的解决方案是让父进程将其作为参数传递给子进程:

  • 从命令行应用程序,check this post 并提取您的 PID(cmd.exe 的 PID)
  • 将其传递给您的程序:> myprogram.exe %PID%
  • 从程序的 main 函数中,使用 argv[1] 获取父级的 PID。

或者,你可以试试这个:当你的程序运行时,cmd.exe 窗口标题被改变,并让程序名称出现在其中(正在运行的命令)。因此,如果您在代码中执行与 tasklist /v /fo csv | findstr /i "myprogram" 等效的操作,输出将显示启动它的正在运行的 cmd.exe 进程的 PID。

>tasklist /v /fo csv | findstr /i "myprogram"
"cmd.exe","44372","Console","1","4 900 Ko","Running","DOMAIN\USER","0:00:00","cmd.exe - myprogram"

请注意,如果启动了许多程序,您将无法知道谁是谁。但如果只有一个有效,这应该可以解决问题。

【讨论】:

  • 我不希望用户每次启动程序时都传递 PID。有没有办法每次都生成一个唯一的数字,而不仅仅是取决于概率?即使这样也能解决我的问题。
  • @Milind:对不起,但这绝对是唯一的解决方案
  • @Milind:检查我的编辑,可能这对你有用
  • 有更好的方法,见stackoverflow.com/a/7486816/886887
猜你喜欢
  • 2010-10-25
  • 2014-01-15
  • 1970-01-01
  • 1970-01-01
  • 2015-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多