2016-02-14 7 views
5

私は多くのPIDを持っているプロジェクトで作業しています。これらのうちどれがゾンビプロセスであるかを調べ、最初のゾンビプロセス。特定のPIDのPPIDが何であるかを調べる方法があるかどうかはわかりません。どんな助けもありがとう。子PIDが与えられたらどうすれば親PIDを得ることができます

+0

[linux:プログラムで他のプロセスの親pidを取得できますか?](http://stackoverflow.com/questions/1525605/linux-programmatically-get-parent-pid-of-another-process) –

+0

' 'libproc'に' get_proc_stats'を入れておきましょう。パブリックインターフェイスから削除されたようです。代わりに 'openproc'と' readproc'を使ってpidを取得します。私は答えを投稿するつもりですが、私はそれを自分自身で動作させることはできません( 'readproc'でクラッシュします)。あなたが使用しているオスがわからないので、適用されないかもしれません。さらに読む[ここ](http://stackoverflow.com/questions/6457682/how-to-programatically-get-uid-from-pid-in-osx-using-c)、[here](http:// goo .gl/W2BBRy)と[ここ](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=731959)を参照してください。 –

+0

ベスト・アンサーは、おそらくあなたが対象とするOSに依存しています。 Linuxの場合、 '/ proc'ファイルシステムがあります。 BSDでは、 'sysctl()'を呼び出す必要があります。私は他のシステムについて知りません... –

答えて

2

機能getppid()は、その処理を行います。

#include <unistd.h> 

int main() 
{ 
    pid_t ppid; 

    ppid = getppid(); 

    return (0); 
} 
+2

これは明らかに呼び出し側プロセスの親PIDだけを取得します。 OPはこれを任意のプロセスで実行したいと考えていますが、一部はゾンビかもしれません。 –

2

psコマンドの送信元で、(とりわけ)が親所与pidpidを返すことproc/readproc.hで定義さget_proc_stats呼び出された関数があります。この機能を利用するには、libproc-devをインストールする必要があります。それから、次のようにすることができます。

#include <proc/readproc.h> 
void printppid(pid_t pid) { 
    proc_t process_info; 
    get_proc_stats(pid, &process_info); 
    printf("Parent of pid=%d is pid=%d\n", pid, process_info.ppid); 
} 

これはhereから取られます。 私は決してこれを使用しませんでしたが、著者によれば、これは参考になるかもしれません。

関連する問題