1

(子) プロセスのゾンビ状態を表示する必要がある fork()、exec() および関連する UNIX 呼び出しで割り当てを行っています。関連するコードは次のとおりです。

pid = vfork();  //used vfork() for showing z state
if(pid>0)
  {
    (some sorting code)
    execl("/bin/ps","/bin/ps","a",(char*)0);             
  }

私が期待するものは次のとおりです。

(child's output)
(parent's output)
(Output of the ps command where I then would be able to show a 'defunct' entry)

私が得るものは次のとおりです。

(child's output)
(parent's output) 
No ps command output. Instead I get: Signal 17 (CHLD) caught by ps (procps version 3.2.8)

ただし、呼び出しsleep(int time)の前に (秒単位の整数時間) が挿入されるexeclと、目的の出力が得られ、Signal エラーは報告されません。

ここで何が起こっているのですか?ps(まだゾンビの)子供の新しい親になりますか?psまた、コマンドが実行されないのはなぜですか? 必要に応じて実行するには何が必要ですsleep()か?ps

私は POSIX/Linux プログラミングが初めてなのでSIGCHLD、私の特定の状況に関するこのシグナルの関連性を評価していただければ幸いです。ありがとう!

4

2 に答える 2

0

私は間違っているかもしれませんが、何が起こっているのかは次のとおりです。

  • 親がブロックしている間、子供は並べ替えコードを開始して実行します。
  • 子供は退出します。
  • 親は の半分をif実行し、 を実行しpsます。
  • psが開始された後SIGCHLD、子プロセスが終了したため、親プロセスに送信されます (シグナルが遅く、予測不能になる可能性があります)。
  • スリープを追加するSIGCHLDと、 が親に配信されますが、親はそれを無視し、制御が に渡されpsます。
于 2012-07-21T16:12:13.300 に答える
-1

題名

Redhat 6.6 で ps -ef が「Signal 17 (CHLD) catch by ps (procps version 3.2.8)」で失敗する

説明

Redhat 6.6 で ps -ef コマンドを実行すると、「Signal 17 (CHLD) catched by ps (procps version 3.2.8)」というエラーで失敗します。

原因

これはサードパーティの問題です。Redhat は、この問題を追跡するために次の記事を作成しました。

https://access.redhat.com/solutions/1235753

解像度

最新の回避策については、Redhat の記事を参照してください。 https://access.redhat.com/solutions/1235753 これらには、以下の libfreebl3.chk ファイルの名前変更が含まれます。

# mv /lib/libfreebl3.chk /lib/libfreebl3.chk-bz1153759
# mv /lib64/libfreebl3.chk /lib64/libfreebl3.chk-bz1153759

追加情報

これは、現在 RedHat によって修正されているようです。RHBA-2014:1867 を参照

于 2015-06-17T09:35:53.887 に答える