問題タブ [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.
python - Windowsでfork()を複製する最良の方法は何ですか?
fork()
Python を使用して、システム コールを使用して Linux にある機能を Windows で再現できるロジックを実装するにはどうすればよいですか?
私は特に SAPI Com コンポーネントでメソッドを実行しようとしていますが、ブロックや待機をせずにメイン スレッドで他のロジックを続行しています。
windows - Windows で Perl CGI スクリプトからバックグラウンド プロセスをフォークするにはどうすればよいですか?
Windows 上で実行しているときに、Perl CGI スクリプトからプロセスをフォークする際に問題が発生しました。主な問題は、Windows での実行時に「fork」がエミュレートされ、実際には新しいプロセス (現在のプロセスの別のスレッド) を作成していないように見えることです。これは、プロセスの終了を待機している Web サーバー (IIS など) が、「バックグラウンド」プロセスが終了するまで待機し続けることを意味します。
Windows で CGI スクリプトからバックグラウンド プロセスをフォークする方法はありますか? さらに良いことに、クロスプラットフォームの方法でこれを行う単一の関数を呼び出すことができますか?
(そして、人生をさらに困難にするために、フォークされたプロセスの出力を同時にファイルにリダイレクトする良い方法が本当に欲しいです)。
c - fork() を引数として
通常、C でフォークする必要がある場合は、次のようにします。
余分な変数を捨てて、次のものを使用できることに気づきました。
不適切なエラー処理はさておき、(なぜ)これは機能するか機能しないのですか?
perl - Perl でプロセスを管理する方法はありますか (つまり、実際に機能するスレッドの置き換え)?
私は perl でマルチスレッド アプリケーションを使用しており、スレッド セーフではないいくつかのモジュールに依存する必要があるため、メッセージ パッシング インターフェイスとしてシグナルを使用してfork()
ed プロセスを使用しています。kill()
問題は、シグナル ハンドラーが少し不安定で (控えめに言っても)、不適切な状態でプロセスが強制終了されることがよくあることです。
これを行うより良い方法はありますか?
perl - Perl 単体テストでサブプロセスを fork すると、prove が停止します。Test::ハーネスの終了
Perl ユーティリティ/モジュール「証明」をいくつかの単体テストのテスト ハーネスとして使用しようとしています。単体テストは、テストの一部としていくつかのバックグラウンド プロセスをフォークする必要があるため、「単体」というよりも「システム」に近いものです。以下を使用して...
ただし、何らかの理由で、.t ファイルにいくつかの余分なプロセスをスピンアップさせると、すべてのテストが終了した後、次のファイルに進むか終了するのではなく、最初の .t ファイルの最後でテスト ハーネスがハングします。 1つしかない場合。
最初は、サブプロセスを強制終了し、機能しないままにしていたためではないかと思いました。だから私は追加しました..
コードに。しかし、それは役に立ちません。実際、閉じた検査では、私の perl テスト ファイルが終了し、現在は機能していないプロセスであり、その子を取得していない証明ラッパー スクリプトであることが判明しました。実際、テストスクリプトの最後に die() 呼び出しを追加すると...
私のスクリプトは終了しましたが、何らかの理由でハーネスが解けません。
テストが失敗し、ハーネスが正常に終了したときにサブプロセスを無効にしたときのように、それを混乱させているのは間違いなく私のサブプロセスであることを確認しました.
何らかの方法でハーネスを混乱させる可能性のあるプロセスを開始する方法に間違っていることはありますか?
ruby - Ruby %x は 64 ビット Linux でフォークしますが、32 ビットではフォークせず、特定の構文でのみフォークします
ここにいくつかのRubyコードがあります:
32 ビットの Ubuntu Dapper では、次の出力が得られます。
それは私には理にかなっています。しかし、64 ビットの Ubuntu Hardy では、次のようになります。
ここで示されているのは、Ruby が exec の前に fork するケースが 1 つだけあるということです。コードをファイルに入れて strace -fF で実行すると、64 ビットの Hardy ではclone()
(like のようにfork()
) beforeを呼び出しているように見えますがexecve()
、32 ビットの Dapper ではそのようなことはしません。
私のRubyバージョンは次のとおりです。
インタープリターと OS とワード サイズをもっと組み合わせて調整する必要がありますが、これらのマシンを管理していないので、現時点では簡単ではありません。32 ビット システムで同じように動作する理由は言うまでもなく、64 ビット システムでのこれらのコマンドの違いさえ何かを教えてくれる人がいるかもしれません。
python - Pythonで親プロセスとフォークされた子プロセスの間でデータを共有するにはどうすればよいですか?
os.plock(op) 関数を使用してこれを行うと確信していますが、方法がわかりません。また、良い方法があれば教えていただけるとありがたいです。コード スニペットは大歓迎です。
windows - Ruby/Webrick の場合、シバン (#!) 表記を認識するための Windows が必要です
(ご容赦ください。これがシバンとウィンドウに到達することを約束します。)
私は、最も単純なWEBRickサーバーをまとめました。
これ以上簡単なことはありません。この基本的なサーバーは、http 接続 (firefox、インターネット エクスプローダー、wget、TELENT) を受け入れ、静的ドキュメントをフェッチするだけであれば、それらを適切に処理します。ただし、ディレクトリ内のファイルの 1 つに .cgi 拡張子を設定すると、500 が返され、サーバーのターミナルに次のように表示されます。
cgi_runner.rb の 45 行目で行われていることを模倣するために、コマンド ラインでいくつかのことを行いました。
明らかに、WEBrick は Windows への着陸を許可されていません。あなたのいつもの企業パラノイアの頭痛の種は、私が webrick を変更することを妨げているので、OS (Windows) によって認識される c:/rubyCGI/test.cgi のシバン表記を取得できますか?使用する? すべての .cgi ファイルを ruby に関連付けることができましたが、長期的には制限されます。
更新: これを投稿して以来、Ruby から CGI Web サーバーを実行することはまったくできないかもしれないと思いました。ruby は fork をサポートしていません。プロセスをフォークする機能がないため、cgi サーバーは各 cgi スクリプトを一度に 1 つずつ実行する必要があり、最初のリクエストが完了するまですべての同時リクエストを無視していました。これは一部の人には受け入れられるかもしれませんが、私のアプリケーションでは機能しません。とはいえ、最初の質問に対する答え、つまり窓の下でシバンを動かすという質問にはまだ非常に興味があります。
c - 親が終了した後に子プロセスを終了させる方法は?
ちょうど 1 つの子プロセスを生成するプロセスがあるとします。親プロセスが何らかの理由で終了した場合 (通常または異常、強制終了、^C、失敗のアサートなど)、子プロセスを終了させたいと考えています。それを正しく行う方法は?
スタックオーバーフローに関するいくつかの同様の質問:
- (以前に質問されました)親プロセスが終了したときに子プロセスを終了させるにはどうすればよいですか?
- (後で尋ねられます) fork() で作成された子プロセスは、親プロセスが強制終了されると自動的に強制終了されますか?
Windowsの stackoverflow に関する同様の質問:
java - Java-Cのようなフォーク?
新しい独立したjvmプロセスを使用して、Javaで「Cのような」フォークを実行することは可能ですか?
どのように?