在批处理脚本中,我需要获取具有给定二进制路径C:\path\to\binary.exe
的进程ID的列表。
在Linux中,我只能执行pidof /path/to/binary
。
从WinXP Home到Win7是否有一个功能相同的Win32可执行文件(任务列表将不起作用)?
包含此软件包的软件包必须是可移植的,因此10MB下载不是我想要的。
WinXP到Win7是否支持C函数?注意:我想匹配一个进程路径,而不是其他应用程序也可以使用的文件名。
最佳答案
您可以使用Toolhelp API枚举流程,获取其完整路径,并将其与所需的流程名称进行比较。您需要遍历每个过程的模块列表。列表中的第一个模块是流程可执行文件本身。这是一个示例代码:
int main( int argc, char* argv[] )
{
if( argc > 1 )
{
printf( "\nGetting PID of: %s\n", argv[1] );
HANDLE hProcSnapshot = ::CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 );
if( INVALID_HANDLE_VALUE != hProcSnapshot )
{
PROCESSENTRY32 procEntry = {0};
procEntry.dwSize = sizeof(PROCESSENTRY32);
if( ::Process32First( hProcSnapshot, &procEntry ) )
{
do
{
HANDLE hModSnapshot = ::CreateToolhelp32Snapshot( TH32CS_SNAPMODULE, procEntry.th32ProcessID );
if( INVALID_HANDLE_VALUE != hModSnapshot )
{
MODULEENTRY32 modEntry = {0};
modEntry.dwSize = sizeof( MODULEENTRY32 );
if( Module32First( hModSnapshot, &modEntry ) )
{
if( 0 == stricmp( argv[1], modEntry.szExePath ) )
{
printf( "\nPID: %ld\n", procEntry.th32ProcessID );
::CloseHandle( hModSnapshot );
break;
}
}
::CloseHandle( hModSnapshot );
}
}
while( ::Process32Next( hProcSnapshot, &procEntry ) );
}
::CloseHandle( hProcSnapshot );
}
}
return 0;
}
关于c - Windows上与Linux中的 “pidof”等价的是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4176931/