6

特定の ID を持つプロセスが存在するかどうかをプログラムで知りたいです。それを達成するために、存在するかどうかをチェックする次の関数を実装しました/proc/<PID>/maps。ただし、指定された ID の関数を強制終了しても、この関数は 1 を返すことに気付きました。私がやろうとしていることを達成するためのより良い方法はありますか?そうでない場合、このコードの問題は何ですか? 0 を返す必要があるときに 1 を返します。

int proc_exists(pid_t pid)
{
    stringstream ss (stringstream::out);

    ss << dec << pid;

    string path = "/proc/" + ss.str() + "/maps"; 

    ifstream fp( path.c_str() );

    if ( !fp )
        return 0;
    return 1;
}
4

2 に答える 2

10

kill()シグナルで使用0:

if (0 == kill(pid, 0))
{
    // Process exists.
}

からman kill:

sig が 0 の場合、シグナルは送信されませんが、エラー チェックは実行されます。これは、プロセス ID またはプロセス グループ ID の存在を確認するために使用できます。

于 2012-09-26T12:33:08.237 に答える
7

プロセスがゾンビとして存在する可能性を克服するために、次を使用しました。

bool is_pid_running(pid_t pid) {

    while(waitpid(-1, 0, WNOHANG) > 0) {
        // Wait for defunct....
    }

    if (0 == kill(pid, 0))
        return 1; // Process exists

    return 0;
}

わたしにはできる!

于 2013-11-27T11:03:42.803 に答える