在批处理脚本中,我需要获取具有给定二进制路径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/

10-09 13:21