問題タブ [waitpid]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - スレッドが現在機能していることを確認する方法
マルチプロセス用のものがあることを知っています
これは、現在作業中の子プロセスがあるかどうかを確認するための非ブロッキング関数呼び出しです。
しかし、マルチスレッドをチェックするための同様のlib関数はありますか?
私がしたいのは、いくつかのグローバル値をリセットしない場合は、現在オンになっているスレッドがあるかどうかを確認することです。
c - fork されたプロセスの終了ステータスが -1 ではなく、wait() がステータスを 255 に設定するのはなぜですか?
子プロセスから整数値を返そうとしています。
ただし、使用すると、からの出力としてexit(1)
取得されます。を使用すると が得られます。256
wait()
exit(-1)
65280
子プロセスから送信した実際の int 値を取得する方法はありますか?
編集: (これは私が実際に望んでいるものです) を使用exit(-1)
すると、 の出力として 255 が得られWEXITSTATUS(status)
ます。無印でいいのでしょうか?
c - パイプから子プロセスへの読み取り
うまくいけば、簡単な質問です。fork()、pipe()、waitpid() を同時に学習しようとしていて、いくつかの問題が発生しています。
私は得ています:
親、監視には私の fds T があります
プログラムが終了する前 - つまり、ループは 1 回だけ実行されます。その下にチェックがあり、WIFEXITED() が近づいているので、プロセスは正常に終了したはずです。しかし、私が気になるのは、それが起こる前に sleep(10) があり、これがすぐに起こることです-子プロセスが残りの待機時間の間実行されたままであることは言うまでもありません.
私は根本的に何かを誤解しています、明らかに。私の期待は、親ループが子からの文字を確認するまでブロックし、それを読み取り、それがまだ生きているかどうかを確認することでした. 私は確かに、子供がまだ生きているときに waitpid() が WIFEXITED を設定するとは思っていませんでした。
どこが間違っていますか?
c++ - POSIXで終了した子プロセスを確認しますか?
終了した子プロセスをチェックし、終了した場合はそれらを再起動するプログラムを作成しようとしています。他のプロセスが終了するのを待たずに、プロセスが終了するときにプロセスを再起動する必要があります。私は少し迷っています。これが私がこれまでに行ったコードです。本当に、それは終わっていないか、正しくありません。しかし、おそらく誰かが私を正しい方向に向けることができますか?
c - 分岐、c での waitpid の問題
何らかの理由で、このコードは親コマンドをすぐに実行し、セマフォを終了させ、他のプログラムのフロー制御を台無しにします。waitpid() が機能しない理由を誰か教えてもらえますか?
}
ありがとう!
編集:わかりました、waitpidを次のように置き換えました:
そして、それが私をそこへの道のりの一部にしました。ペアレンタルコントロールをすぐに実行するわけではありませんが、今は決して実行しないようです. あなたが話したパイプの問題に関する限り、プログラム 1 (これ) は、パイプを含むすべての IPC 要素を終了することになっています。もっと良い方法があれば、ぜひ聞きたいです。
ありがとう@ジョナサン
c - POSIXシグナルハンドラーの競合状態
次のプログラムは、「/ bin/sleep10」を繰り返し実行する子をフォークします。親はSIGINTのシグナルハンドラーをインストールし、SIGINTを子に配信します。ただし、子へのSIGINTの送信が失敗する場合があります。それはなぜですか、そして私は何が恋しいですか?
fork - Linuxでzoombieプロセスを防ぐためにwait_pid関数を配置する場所は?
OpenSSLマルチスレッド サーバーの例に従っていますが、この例では zoombie プロセスが作成されます。調査したところ、分岐したプロセスごとに waitpid() を実行する必要があることがわかりました。waitpid(pid, NULL, 0);
しかし、while-loop の直前に配置した場所を特定することはできませんが 、すべてのプロセスを待つのではなく、フォークされた即時のプロセスを待つだけです。誰かがどこでどのようにwaitpid()呼び出しを実行するかを案内してもらえますか? ありがとう!
linux - OOM killer がプロセスを強制終了したときの戻りコード
SUSE SLES 11 を使用する POWER7 システムでマルチプログラム ワークロード (SPEC CPU2006 ベンチマークに基づく) を実行しています。
場合によっては、ワークロード内の各アプリケーションが大量のメモリを消費し、合計メモリ フットプリントがシステムにインストールされている使用可能なメモリ (32 GB) を超えることがあります。
そうしないと、スワップを使用するプロセスの測定値が大きく影響を受ける可能性があるため、スワップを無効にしました。そうすることで、カーネルが OOM キラーを介して一部のプロセスを強制終了する可能性があることを私は知っています。それはまったく問題ありません。問題は、カーネルによって強制終了されたスレッドがエラー状態 (たとえば、プロセスがシグナルによって終了された) で終了したことを期待していたことです。
すべてのプロセスを起動し、それらを使用して待機するフレームワークがあります
スレッドが OOM キラーによって強制終了された場合でも (画面と /var/log/messages にメッセージが表示されるので、そのことはわかっています)、呼び出しは
1 を返し、呼び出し
ゼロを返します。したがって、プロセスがいつ正常に終了したのか、いつ OOM キラーによって強制終了されたのかを区別することはできません。
私は何か間違ったことをしていますか?OOMキラーによってプロセスが強制終了されたことを検出する方法を知っていますか?
この投稿がほぼ同じ質問をしているのを見つけました。しかし、それは古い投稿であり、回答が満足のいくものではなかったため、新しい質問を投稿することにしました。
c - Oracle beqおよびpopen()
私はこのようなプログラムを持っています(これはPro * Cプリコンパイラ用です):
oracleへのtcp/ip接続を使用すると、問題なく動作します。しかし、BEQを使用すると、pclose()はerrno 10で-1を返します。誰かがBEQ接続で発生する可能性のある問題を説明するドキュメントに私を導くことができますか?オラクルの内臓のどこかに、すでにwait()呼び出しがあるようです…</ p>
perl - 子供を殺さずにwaitpidをタイムアウトする方法は?
waitpid とタイムアウトに関する多くの質問があることは承知していますが、それらはすべて、アラーム ハンドラ内から子を殺すことでこれをカバーしています。
それは私が望むものではありません。プロセスを実行し続けたいのですが、waitpid からディスパッチします。
私が解決しようとしている根底にある問題は、キューを処理するメイン ループを持つデーモン プロセスです。タスクは一度に 1 つずつ処理されます。
タスクがハングすると、メイン ループ全体がハングします。これを回避することは、当然の選択のようfork()
に思えました。waitpid
それでもタスクがハングすると、ループがハングします。
waitpid をまったく使用しない回避策を考えることができますが、ハングする可能性のあるタスクと並行して一度に 1 つのタスクを処理したいので、実行中のプロセスを別の方法で追跡する必要があります。
タスクを強制終了することもできますが、正確に何が問題なのかを調べるために実行したいと思います。一部のデバッグ情報をダンプする kill ハンドラーも可能です。
とにかく、その問題を解決する最も便利な方法は、可能であれば waitpid をタイムアウトにすることです。
編集:
これは私が fork() と waitpid を使用した方法であり、子の意味がより明確になる可能性があります。
編集:
waitpid WNOHANG を使用すると、私が望むことができます。この使用法は良い習慣ですか、それとも別の方法で行いますか?