将Cygwin PID转换为Windows PID

Jaz*_*azz 7 shell cygwin sysinternals

我有一个使用Cygwin shell脚本生成的进程,我无法使用该kill命令将其杀死.即使在Cygwin的杀-f选择,我得到这个消息:

kill: couldn't open pid 1234
Run Code Online (Sandbox Code Playgroud)

我想尝试要杀死它PsKill,但我不能找到一种方法来转换Cygwin PIDWindows PID那个PsKill就明白了.我怎样才能做到这一点?

Mic*_*lon 10

您是否尝试过运行cygwin kill而不是bash内置?如果是Windows PID,则键入:

/bin/kill -f 1234
Run Code Online (Sandbox Code Playgroud)

或者如果它是Cygwin PID,则键入:

/bin/kill -9 1234
Run Code Online (Sandbox Code Playgroud)

据我所知,Cygwin没有API可以调用将Cygwin PID转换为Windows PID.但是,您可以解析输出ps -W以进行转换.或者,如果你真的,真的不想这样做,那么看一下Cygwin ps命令的源代码,看看他们从哪里得到pids.Cygwin ps源代码在这里..您可以在C中编写一个小实用程序来获取Cygwin pid并为您提供Windows pid.

  • 如果你使用-f,那么你应该从ps -W给它Windows PID (2认同)

War*_*ung 6

ps -W 除了Cygwin PID之外,还会显示Windows PID.

或者,您可以这样编程:

#include <sys/cygwin.h>
winpid = cygwin_internal(CW_CYGWIN_PID_TO_WINPID, cygpid);
Run Code Online (Sandbox Code Playgroud)


End*_*ife 5

proc文件系统有cygwin的PID $ PID在Windows PID /proc/$pid/winpid

> notepad&
[1] 11716
> taskkill /f /pid $(</proc/$!/winpid)
ERFOLGREICH: Der Prozess mit PID 11976 wurde beendet.
[1]+  Exit 1                  notepad
Run Code Online (Sandbox Code Playgroud)