【问题标题】:Cygwin: How can I obtain the PID of a program started by CygStart?Cygwin:如何获取由 CygStart 启动的程序的 PID?
【发布时间】:2014-03-31 01:15:34
【问题描述】:

如果我打开 CygWin Bash shell 并执行以下操作:

Luis@Kenobi ~/Temporal
$ notepad &
[1] 1880

Luis@Kenobi ~/Temporal
$ echo $!
1880

PID 变量 $! 是正确的。
但如果我这样做:

Luis@Kenobi ~/Temporal
$ cygstart notepad

Luis@Kenobi ~/Temporal
$ echo $!
[No results]

这一次$!根本没有任何价值。

如何获取刚刚启动的 CygStart 程序的 PID

【问题讨论】:

  • 如果你先cygstart notepad &然后echo $!会发生什么
  • 那么 PID 就正确分配给了$!,@BroSlow。也许这是唯一的办法。
  • @BroSlow,根据@AdrianFrühwirth 的回答,& 后台方法只是返回 cygstart 进程的 PID,而不是记事本。

标签: bash process cygwin pid


【解决方案1】:

你不能。您可以通过

获取cygstart进程的PID
$ cygstart notepad &
$ echo "$!"

但这对你没有任何好处,因为我猜你想控制notepad 进程。由于cygstart 通过Windows 的ShellExecuteW 启动notepad,因此它不会是cygstart/您当前shell 的子进程,因此您无法通过killing @kill 它@ 987654332@.

您可以使用Process Explorer 轻松验证这一点。

【讨论】:

  • 你说得对,@AdrianFrühwirth,例如,我想杀死notepad。也许 Windows 有某种方法可以在某处报告此 PID。我认为这将需要创建一个新问题。无论如何,谢谢。
  • @SopalajodeArrierez 我对 Windows API 一无所知,但我猜ShellExecute* 函数能够返回 PID,并且您可以编写自己的包装器/自定义 cygstart 以将 PID 打印到 @ 987654337@,因此如果确实需要,您可以在脚本中使用它,就像附加提示一样。
猜你喜欢
  • 2013-02-07
  • 2013-03-31
  • 1970-01-01
  • 1970-01-01
  • 2011-06-12
  • 2012-02-27
  • 2010-12-30
  • 1970-01-01
相关资源
最近更新 更多