Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在shell脚本中,如何关闭通过参数定位的Windows进程?_Windows_Shell_Process - Fatal编程技术网

在shell脚本中,如何关闭通过参数定位的Windows进程?

在shell脚本中,如何关闭通过参数定位的Windows进程?,windows,shell,process,Windows,Shell,Process,我使用CygWin中包含的可执行文件来运行Python程序,例如: c:\CygWin\bin\python2.7.exe /usr/local/bin/FunnyProgram.py c:\CygWin\bin\python2.7.exe /usr/local/bin/BoringWordProcessor.py 请注意,/usr/local…内容是参数部分,而不是可执行程序。 我正在制作一个Windows shell脚本,假装关闭其中的某个人,例如“FunnyProgram.py”。但我不

我使用CygWin中包含的可执行文件来运行Python程序,例如:

c:\CygWin\bin\python2.7.exe /usr/local/bin/FunnyProgram.py
c:\CygWin\bin\python2.7.exe /usr/local/bin/BoringWordProcessor.py
请注意,
/usr/local…
内容是参数部分,而不是可执行程序。
我正在制作一个Windows shell脚本,假装关闭其中的某个人,例如“FunnyProgram.py”。但我不能:

taskkill /im "Funny*" /f
因为操作系统似乎看到的是:

C:\>tasklist | find "python" /i
python2.7.exe                 5012 Console                    1    13.240 KB
如果我这样做,根本没有结果:

tasklist | find "Funny" /i
我也无法通过使用SysInternals PSExec找到它:

C:\>pslist python -x
pslist v1.3 - Sysinternals PsList
Copyright (C) 2000-2012 Mark Russinovich
Sysinternals - www.sysinternals.com
Process and thread information for KENOBI:
Name                Pid      VM      WS    Priv Priv Pk   Faults   NonP Page
python2.7          5012  588464   13240   13416   13556     3458     11  103
 Tid Pri    Cswtch            State     User Time   Kernel Time   Elapsed Time
 580  10       316     Wait:UserReq  0:00:00.062   0:00:00.202    0:23:42.743
2760  11         4   Wait:Executive  0:00:00.000   0:00:00.000    0:23:42.741
 616   8         4     Wait:UserReq  0:00:00.000   0:00:00.000    0:23:42.597
3164  11        49     Wait:UserReq  0:00:00.000   0:00:00.000    0:23:42.460
C:\Windows\system32>handle -p "python"
Handle v3.51
Copyright (C) 1997-2013 Mark Russinovich
Sysinternals - www.sysinternals.com
------------------------------------------------------------------------------
python2.7.exe pid: 5012 KENOBI\Luis
   60: Section       \BaseNamedObjects\cygwin1S5-c5e39b7a9d22bafb\shared.5
   64: Section       \BaseNamedObjects\cygwin1S5-c5e39b7a9d22bafb\S-1-5-21-33151
06853-2407454319-848584108-1000.1
   70: Section       \BaseNamedObjects\cygwin1S5-c5e39b7a9d22bafb\cygpid.5012
   C0: Section       \BaseNamedObjects\cygwin1S5-c5e39b7a9d22bafb\c5e39b7a9d22ba
fb-cons0x240B0C.0
   CC: Section       \BaseNamedObjects\cygwin1S5-c5e39b7a9d22bafb\cygpid.5552
  254: File  (RWD)   C:\Users\Luis
对于系统内部句柄,基本相同:

C:\>pslist python -x
pslist v1.3 - Sysinternals PsList
Copyright (C) 2000-2012 Mark Russinovich
Sysinternals - www.sysinternals.com
Process and thread information for KENOBI:
Name                Pid      VM      WS    Priv Priv Pk   Faults   NonP Page
python2.7          5012  588464   13240   13416   13556     3458     11  103
 Tid Pri    Cswtch            State     User Time   Kernel Time   Elapsed Time
 580  10       316     Wait:UserReq  0:00:00.062   0:00:00.202    0:23:42.743
2760  11         4   Wait:Executive  0:00:00.000   0:00:00.000    0:23:42.741
 616   8         4     Wait:UserReq  0:00:00.000   0:00:00.000    0:23:42.597
3164  11        49     Wait:UserReq  0:00:00.000   0:00:00.000    0:23:42.460
C:\Windows\system32>handle -p "python"
Handle v3.51
Copyright (C) 1997-2013 Mark Russinovich
Sysinternals - www.sysinternals.com
------------------------------------------------------------------------------
python2.7.exe pid: 5012 KENOBI\Luis
   60: Section       \BaseNamedObjects\cygwin1S5-c5e39b7a9d22bafb\shared.5
   64: Section       \BaseNamedObjects\cygwin1S5-c5e39b7a9d22bafb\S-1-5-21-33151
06853-2407454319-848584108-1000.1
   70: Section       \BaseNamedObjects\cygwin1S5-c5e39b7a9d22bafb\cygpid.5012
   C0: Section       \BaseNamedObjects\cygwin1S5-c5e39b7a9d22bafb\c5e39b7a9d22ba
fb-cons0x240B0C.0
   CC: Section       \BaseNamedObjects\cygwin1S5-c5e39b7a9d22bafb\cygpid.5552
  254: File  (RWD)   C:\Users\Luis
如何检测PID(以便关闭它),或至少直接关闭某些特定程序,通过其参数定位它?
(我希望在Windows shell脚本中执行此操作,但如果需要,可以接受其他命令行实用程序

编辑:另一种方法不起作用。如果我使用
notepad test.txt
,我可以使用PowerShell找到它:

$process = "notepad.exe"
gwmi Win32_Process -Filter "name = '$process'" | select CommandLine
我将这两行代码保存到“TestNotepad.ps1”中,并执行以下操作:

C:\>Powershell.exe -executionpolicy remotesigned -File TestNotepad.ps1
CommandLine
-----------
"C:\Windows\system32\notepad.exe"
"C:\Windows\system32\NOTEPAD.EXE" D:\test.txt
但对于文件:

$process = "python2.7.exe"
gwmi Win32_Process -Filter "name = '$process'" | select CommandLine
我只得到一个简单的答案:

C:\>Powershell.exe -executionpolicy remotesigned -File TestPython.ps1
CommandLine
-----------
"C:\CygWin\bin\python2.7.exe"
…完全没有参数。奇怪

Windows外壳:

C:\Python33\python.exe c:\helloworld.py
Powershell:

PS C:\Users\David> $process = "python.exe"
PS C:\Users\David> gwmi Win32_Process -Filter "name = '$process'" | select CommandLine

CommandLine
-----------
C:\Python33\python.exe  C:\helloworld.py
PS C:\Users\David> $process = "python3.2m.exe"
PS C:\Users\David> gwmi Win32_Process -Filter "name = '$process'" | select CommandLine

CommandLine
-----------
C:\cygwin\bin\python3.2m.exe  C:\helloworld.py

从在cygwin\bin中调用python的windows shell:

c:\cygwin\bin\python3.2m.exe c:\helloworld.py
Powershell:

PS C:\Users\David> $process = "python.exe"
PS C:\Users\David> gwmi Win32_Process -Filter "name = '$process'" | select CommandLine

CommandLine
-----------
C:\Python33\python.exe  C:\helloworld.py
PS C:\Users\David> $process = "python3.2m.exe"
PS C:\Users\David> gwmi Win32_Process -Filter "name = '$process'" | select CommandLine

CommandLine
-----------
C:\cygwin\bin\python3.2m.exe  C:\helloworld.py

这个问题似乎来自官方CygWin存储库中包含的Python解释器(截至今天,v2.7.3)。 令人高兴的是,解决方案本身似乎在自己的CygWinpgrep命令上

假设此命令行运行Python进程:

c:\CygWin\bin\python2.7.exe /usr/local/bin/FunnyProgram.py
-->要查找流程,我们可以使用
pgrep
-f
选项(搜索完整路径):

-->要直接终止进程,请执行以下操作:

$ kill $(pgrep -f FunnyProgram.py)
我不知道为什么
ps
tasklist
或任何其他命令无法执行
pgrep
所做的操作

根据@DeveloperGuo的说法,这个问题可以在v3及以后解决


遗憾的是,PythonV2和v3脚本不兼容,所以我希望这个线程能够帮助任何来到这里寻找知识和智慧的人:-)

您可以从windows shell脚本调用powershell。无法运行,@DeveloperGuo。在原始问题中添加了额外信息。无论如何,谢谢。好吧,@DeveloperGuo,我必须假设问题是我的。可能是因为我使用的是CygWin版本的Python,而不是本机的Windows版本。我尝试了Python3,但脚本不兼容。我认为适当的做法是打开一个新的线程询问CygWin的情况。谢谢你的努力。