在cygwin上替代`pkill`或`pgrep -f`?

too*_*kit 9 kill cygwin ps

假设我已经开始了我的过程:

java -DSOME_STRING -jar foo.jar
Run Code Online (Sandbox Code Playgroud)

然后在 linux 上,我可以使用以下命令来查找或终止此进程:

pgrep -f SOME_STRING
pkill -f SOME_STRING
Run Code Online (Sandbox Code Playgroud)

但是,这似乎不适用于 cygwin。谁能建议 cygwin 中这些工具的替代方案?

Eig*_*ony 16

pkill 和 pgrep 肯定存在于 Cygwin 中,位于procps包中(您可以在此处搜索 cygwin 包)。

它似乎对我有用,

tony:~$ nohup sleep 100983 &
[1] 5476
tony:~$ nohup: ignoring input and appending output to `nohup.out'
tony:~$
tony:~$ ps -ef | grep sleep
    tony    5476    2696   2  23:28:53 /usr/bin/sleep
tony:~$ pkill -f sleep
[1]+  Terminated              nohup sleep 100983
tony:~$
Run Code Online (Sandbox Code Playgroud)

tony:~$ nohup sleep 837746 &
[1] 228
tony:~$ nohup: ignoring input and appending output to `nohup.out'
tony:~$ pgrep -f 837746
228
tony:~$ pkill -f 837746
[1]+  Terminated              nohup sleep 837746
tony:~$
Run Code Online (Sandbox Code Playgroud)

更新:好的,用java测试过。从Cygwin的命令行执行Java不会导致在java字符串被放入/proc/<pid>/cmdline,只包含-bash。这似乎是 Cygwin 的一个限制。

tony:~$ java -Dsomething=valid -jar Captor.jar &
[1] 2700
tony:~$ ps -ef
     UID     PID    PPID TTY     STIME COMMAND
    tony    4164       1   ?    Aug 21 /usr/bin/mintty
    tony    4676    4164   0    Aug 21 /usr/bin/bash
    tony    5776    4676   0    Aug 23 /usr/bin/ssh
    tony    5148       1   ?  23:53:03 /usr/bin/mintty
    tony    5332    5148   1  23:53:03 /usr/bin/bash
    tony    5816       1   ?  00:04:16 /usr/bin/mintty
    tony    5432    5816   2  00:04:16 /usr/bin/bash
    tony    2700    5432   2  00:04:34 /cygdrive/c/Windows/system32/java
    tony    2232    5432   2  00:04:39 /usr/bin/ps
tony:~$ pgrep -f something
tony:~$ cat /proc/2700/cmdline
-bash
tony:~$
tony:~$ cat /proc/2700/exename
/cygdrive/c/Windows/system32/java
Run Code Online (Sandbox Code Playgroud)

因此,我怀疑,答案是您不能使用 Cygwin 工具执行此操作,您需要一个 Windows 特定工具。

  • @thameera 尝试包`procps-ng`。 (2认同)
  • 使用最新的 cygwin 进行 `apt-cyg install procps-ng` (2认同)

Cal*_*leb 7

在较旧的 Cygwin 版本中,procps您可以安装一个包以使用相同的命令获得相同的功能。

在较新的 Cygwin 版本中,该procps包不再存在,并由包替换procps-ng


Gil*_*il' 5

Cygwin 实用程序的工作方式类似于 Linux 实用程序,但它们仅适用于 Cygwin 进程。对于 Windows 进程,您需要使用 Windows 实用程序,例如来自Sysinternals 的实用程序。PsKill可以按名称杀死进程。

  • 本地`taskkill /f /im procname.exe` 也可以 (4认同)
  • `ps` 还显示带有 `-W` 开关的 Windows 进程 (2认同)