gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 10:24:04 25 4
gpt4 key购买 nike

我曾经通过 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

SysInternals Handle 基本相同:

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 shell :

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

电源 shell :

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

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

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

电源 shell :

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

关于windows - 如何在 shell 脚本中关闭通过参数定位它的 Windows 进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22738236/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com