問題タブ [fork]
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++ - valgrind にフォークされたプロセスを memcheck するように指示するにはどうすればよいですか?
x
でリークをチェックしたいプロセスがありvalgrind
ます。問題は、x
が によって実行されy
、さらにによってy
実行されることz
です。環境変数、コマンド ライン スイッチ、必要なファイルなど、の 環境をセットアップするため、x
スタンドアロンで実行できません。y
z
x
x
valgrind
実行するように指示できる方法はありますz
が、見つかったフォークを追跡して報告する方法はありますか?valgrind
フォークをたどって、という名前のプロセスについてのみ報告するように指示できる方法はありますx
か?valgrind
gdbでできる方法で、すでに実行中のプロセスにアタッチするように指示できる方法はありますか?
これが問題かどうかはわかりませんが、SuSE64 Linux と valgrind-2.4.0 で実行しています。
ありがとう!
php - PHP / Apache でのプロセス分岐は良い考えですか?
私は PHP で単純なアプリケーションを作成しています。これは、かなり集中的な MySQL 更新セットを時折実行する必要があります。これがユーザーに遅延を引き起こすことを特に望んでいないので、pcntl_fork() を使用することを考えています。
ただし、これが実際にどのように機能するかはわかりません。親プロセスが終了した後、子プロセスは引き続き実行されますか? 親プロセスが終了し、子プロセスが完了する前にユーザーのページの読み込みが完全に完了するか?
言い換えれば、これは PHP スクリプト (Apache で実行) に時間のかかる更新をユーザーを遅らせることなく実行させる安全な方法ですか、それともユーザーに多少の遅延を我慢するように頼むべきでしょうか?
python - ウェブホスティング コントロール パネル アプリケーション用の CherryPy
かなり長い間、Web ホスティングのコントロール パネルになることを目標とするペット プロジェクトを開始したいと考えていましたが、主に Python ホスティングに焦点を当てていました。つまり、ユーザーが Django を生成/起動する方法を作りたいということです。 / パネルから直接他のフレームワーク プロジェクト。それを使ってアプリを構築するのに最適なツール、CherryPy を見つけたようです。
これにより、自分の好きなプログラミング言語で、独自の HTTP/HTTPS サーバーを使用してアプリを構築することができます。
しかし、ここで新たな疑問が生じます。CherryPy はスレッド化されたサーバーであるため、この種のタスクに適しているでしょうか?
時間のかかるタスクが多数あるため、タスクの 1 つがブロックされると、他のページにアクセスしようとしている残りのユーザーは待機状態になり、最終的にタイムアウトになります。
この種の問題は、フォーク ベースのサーバーでは発生しないと思います。
何をアドバイスしますか?
php - フォークされた子の最大数を強制するにはどうすればよいですか?
編集:より多くの応答を得ることを期待して、この C にタグを付けました。特定の言語の実装よりも、私が興味を持っているのは理論です。したがって、C コーダーである場合は、次の PHP を疑似コードとして扱い、C で記述された回答を自由に返信してください。
シリアルではなく並列でタスクを実行することにより、PHP CLI スクリプトを高速化しようとしています。タスクは互いに完全に独立しているため、開始/終了の順序は関係ありません。
元のスクリプトは次のとおりです (わかりやすくするために、これらの例はすべて省略されていることに注意してください)。
以下に示すよう$items
に、並行して動作させることができました。pcntl_fork()
今度はこれを拡張して、たとえば一度に最大 10 人の子供がアクティブになるようにします。これを処理する最良の方法は何ですか? 私はいくつかのことを試しましたが、あまり運がありませんでした。
c - fork()/SIGCHLD 競合状態の回避
fork()
次の/SIGCHLD
疑似コードを検討してください。
上記の例では、競合状態があります。/* child stuff */
" " が開始する前に " " が終了する可能性/* parent stuff */
があります。その結果、子の pid が終了後に子のリストに追加され、決して削除されない可能性があります。アプリが終了する時が来ると、親は既に完成した子が完成するのを際限なく待ちます。
これに対抗するために考えられる解決策の 1 つは、 と の 2 つのリストを作成することstarted_children
ですfinished_children
。今追加しstarted_children
ているのと同じ場所に追加しchildren
ます。しかし、シグナル ハンドラでは、 fromchildren
を削除する代わりに、 to を追加しfinished_children
ます。started_children
アプリが終了すると、親はとの差finished_children
がゼロになるまで待つことができます。
私が考えることができる別の可能な解決策は、共有メモリを使用することです。たとえば、親の子のリストを共有し、子.add
と.remove
自分自身を許可しますか? しかし、私はこれについてあまり知りません。
編集: 最初に頭に浮かんだ別の解決策は、単純にsleep(1)
先頭に a を追加する/* child stuff */
ことですが、それは私には変なにおいがするので、省略しました。また、それが 100% 修正されるかどうかもわかりません。
では、この競合状態をどのように修正しますか? また、これの定評のあるおすすめパターンがあれば教えてください!
ありがとう。
linux - プログラムがフォークしたときに出力バッファをクリアするにはどうすればよいですか?
FILE *cgiOut に書き込むプログラムがあり、ストリームに書き込んだ直後に、フォークしてバックグラウンド プロセスを実行する必要があります。問題は、フォークの後、 FILE * ストリームが時々フラッシュアウトするように見え、出力が重複することです (フォークの後、開いているすべてのファイルが閉じられ、バッファがフラッシュされると思います)。どうすればこれを回避できますか? ライブラリで開かれているので、マスタープロセスでファイルを閉じたくありません。それはソケットまたはパイプだと思います。
multithreading - 分岐したプロセスの開始と停止
Is it possible for a parent process to start and stop a child (forked) process in Unix?
I want to implement a task scheduler (see here) which is able to run multiple processes at the same time which I believe requires either separate processes or threads.
How can I stop the execution of a child process and resume it after a given amount of time?
(If this is only possible with threads, how are threads implemented?)
c++ - fork() で作成された子プロセスは、親が強制終了されると自動的に強制終了されますか?
fork()
C/C++ で子プロセスを作成しています。
親プロセスが終了する(または何らかの理由で強制終了される)と、すべての子プロセスも強制終了されます。
それはシステムによって自動的に行われますか?それとも自分でやらなければなりませんか?
既存の同様の質問:
c - マルチプロセス プログラムのプロファイリング
いくつかの子プロセスを fork して生成するプログラムのプロファイルを作成したいと思います。一部の機能にどれだけの時間が費やされているかを確認したい。このジョブを処理できるプロファイラーはどれですか?
linux - C の壊れたパイプ -- pipe()、fork()、exec() プログラム
簡単なプログラムを書く必要があります: 親といくつかのプログラム [子] (execl
親で開始) があります。子供たちは次のように互いに通信します。子供 I は親番号 J に送信し、親はメッセージ (「あなたにメッセージがあります」など) を J に送信し、J は親番号 K に送信します。
そして問題があります-私のプログラム(strace
コマンドでテスト済み)が子にメッセージを送信しようとすると、壊れたパイプエラーが発生します。
誰かがコードを調べて、何が問題なのか教えてくれたら幸いです。
コードは次のとおりです。