問題タブ [vfork]
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 - vfork では、子が繰り返し作成されます
誰でも次のコードを説明できます。
上記のコードでは、子プロセスが繰り返し作成されます。誰でもロジックを理解するのを手伝ってもらえますか?
c - 関数内で vfork() を呼び出し、結果について混乱している
これは "APUE" の第 8 章 (演習 8.2、第 2 版) の演習です。すべての説明は次のとおりです。
図 7.6 の典型的なメモリ配置を思い出してください。各関数呼び出しに対応するスタック フレームは通常スタックに格納され、vfork の後に子は親のアドレス空間で実行されるため、vfork の呼び出しが main 以外の関数からのもので、子がそれを実行するとどうなるかvfork 後のこの関数からの戻り? これを検証するためのテスト プログラムを作成し、何が起こっているかを図で示します。
私のプログラムでは:
プログラムを実行すると、出力は次のようになります。
出力について混乱しています。
- print
f1 address: xxx、 vfork() を呼び出し、子プロセスが最初に実行されます。 - print
f2 address: xxx、次に子プロセスが _exit(0) を呼び出します。 - f1() からの主な進行状況の戻り時に、f1 のスタック フレームが f2 によって変更されたため、セグメンテーション フォールトが発生する可能性があります。
しかし、なぜf1 address: 41966042 回出力し、なぜ f1 と f2 のアドレスが同じでないのでしょうか?
c - Busybox udhcpd vfork が 2 つのプロセスを開始する
私のアプリケーションでは、Busybox udhcpd (dhcp サーバー) を起動する必要があります。コードは以下のとおりです。udhcpd が起動して実行されると、プロセス リストに 2 つのバージョンが表示されます。udhcpd が正しく実行されている (つまり、IP アドレスがデバイスに割り当てられている)。
ログ出力
UDHCPD は PID: 647 (PID=528) で開始されました
PS出力
/var/run/udhcpd.pid を見ると、pid は 648 です。コードの別の部分では、上記と同じコードを使用して dhcpcd (dhcp クライアント) を開始しますが、プロセス リストにはエントリが 1 つしかありません。誰かが違いを説明できますか?もし私が間違ったことをしているなら、私は何をすべきですか?
質問の理由は、後で udhcpd を停止する必要があり、子の pid (647) と /var/run/udhcpd.pid (648) から読み取った pid の両方の使用を停止する必要があるようです。
linux - vfork() はエラー番号 513 で失敗しました
RHEL 6.6 ベースの環境では、XML rpc サーバーによって作成されたスレッドから IO を実行しています。スレッドは、vfork() を実行する外部コマンドを実行します。vfork() システム コールはエラー番号 513 で失敗します。
考えられる理由は何ですか?
c - vfork() でセグメンテーション違反が発生するのはなぜですか
次のコードを実行すると
exec() または _exit() が呼び出されない限り、変数を変更しようとすると vfork() が奇妙な動作をする可能性があることは知っていますが、正確に何が起こっているのか誰か説明してもらえますか?? hello world が 3 回印刷されるのはなぜですか? printf() がバッファリングされているためですか?そして最後に、親が戻ろうとしているときにセグフォルトが発生するのはなぜですか?