子プロセスは、作成される前からコードを実行しているようです。どうすれば止められますか?

Oathkeeper594

単一の親プロセスがwhileループで複数の子を作成するプログラムを作成しようとしています。テストのために、私は4つのプロセス(1つの親とその3つの子)のみを作成しようとし始めました。しかし、(私の知る限り)その行に戻るための再帰はありませんが、子供たちは作成された行より上でコードを実行しているようです。

これが私が今持っているものです:

int main() {

  time_t start;
  time_t end;
  int i = 0;
  pid_t pid;

  start = time(NULL);
  printf("Αρχική τιμή δευτερολέπτων %d\n", start);

  pid = fork();
  printf("%d ", pid);
  while (i < 2) {
    if (pid > 0) {
      fork();
      wait();
      i++;
    }
  }

  printf("check ");

  printf("%d", pid);

  if (pid > 0) {
    end = time(NULL);
    printf("%d\n", end - start);
  }

  return 0;
}

そのための私の出力は次のとおりです。

Αρχική τιμή δευτερολέπτων 1547394155
29338 check 29338 0
29338 check 29338 0
29338 check 29338 0
29338 check 29338 0

したがってprintf ("%d ", pid)、一度に2つのプロセスしか実行されていないはずなのに、4回実行されているように見えます。

クサラナンダ

これは、「fork()を使用するプログラムが出力を複数回出力することがあるのはなぜですか?」の問題に似ています

printf("%d ", pid)文字列が改行で終了しておらず、を呼び出さないため、出力バッファをすぐにフラッシュすることはありませんfflush(stdout)これは、フラッシュされていないバッファが子プロセスに継承され、最後のprintf()呼び出し(改行を出力する)またはプログラムの実行の最後にバッファが最終的にフラッシュされたときに、元の親のPIDが何度も出力されることを意味します。

fflush(stdout)そのprintf()呼び出しの直後に挿入すると(適切なヘッダーを含めてwait()正しく呼び出すとともに)、次のようになります。

Αρχική τιμή δευτερολέπτων 1547400480
79301 0 check 793010
check 793010
check 793010
check 793010

また、whileループ内で無期限にループしているプロセス(pid値がゼロの最初の子プロセスが取得されることにも注意してください

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

コマンドプロンプトからさまざまなパラメータを取得するバックグラウンドプロセスとしてPythonスクリプトを実行するにはどうすればよいですか?

分類Dev

プロセス置換を使用してコマンドラインからchromeを実行するにはどうすればよいですか?

分類Dev

マクロがVBAを使用して電子メールまたはデスクトップから実行されているかどうかを確認するにはどうすればよいですか?

分類Dev

プロセスがWindows自動実行キーから開始されたかどうかを確認するにはどうすればよいですか?

分類Dev

子プロセスを使用して、親ディレクトリから.classファイルを実行するにはどうすればよいですか?

分類Dev

プロセスが終了してから実行された時間を確認するにはどうすればよいですか?

分類Dev

pandasデータフレームの現在の行から前の行を減算して、それぞれの名前でプロセスを再開する新しい列を作成するにはどうすればよいですか?

分類Dev

dockerode、コンテナ内で実行されているプロセスをノードプロセスから独立させるにはどうすればよいですか?

分類Dev

プロセスが正常に実行されている場合でも、コアダンプを作成するにはどうすればよいですか?

分類Dev

n個の子プロセスを生成して同時に実行し、それらの実行時間を測定し、各プロセスが最大実行時間を超えないようにするにはどうすればよいですか?

分類Dev

subprocess.Popenによって実行されるプロセスから戻り値を取得するにはどうすればよいですか?

分類Dev

subprocess.Popenによって実行されるプロセスから戻り値を取得するにはどうすればよいですか?

分類Dev

コマンドラインからプロセスが停止しているかどうかを確認するにはどうすればよいですか?

分類Dev

各ユーザープロファイルに対してこれらのコマンドを実行するにはどうすればよいですか?

分類Dev

tkinterからスレッドで実行されているWebSocketにメッセージを送信するにはどうすればよいですか?

分類Dev

現在カーネルモードで実行されているすべてのプロセスを取得するにはどうすればよいですか?

分類Dev

InternetExplorerDriver は、findElement メソッド NoSuchWindowException を使用して WebDriverException をスローします。これを止めるにはどうすればよいですか?

分類Dev

Unityセッションからログアウトする(直前に)ローカルコマンド(スクリプトを実行する)を実行するにはどうすればよいですか?

分類Dev

Node.jsでプロセスをフォークして、ファイルからではなく、親で使用可能なバッファからJSコードを実行するにはどうすればよいですか?

分類Dev

実行されたプリペアドステートメントからJSONを作成するにはどうすればよいですか?

分類Dev

コマンドプロンプトからバックグラウンドで実行されている特定のプロセスを強制終了するにはどうすればよいですか?

分類Dev

複数のコアでbashを使用してパイプされたプロセスを実行するにはどうすればよいですか?

分類Dev

Linuxマシンで最後に起動してから作成されたプロセスの数を取得するにはどうすればよいですか?

分類Dev

Pythonコードからpylintコマンドを実行するにはどうすればよいですか。また、pylintのどの引数が私の必要に応じてログメッセージを作成できますか

分類Dev

止められないループでこのコードを修正するにはどうすればよいですか?

分類Dev

RスクリプトをJRIにロードしてJavaから実行するにはどうすればよいですか?

分類Dev

独立して実行され、メインプロセスが閉じられても実行を継続するサブプロセスをPythonで開始するにはどうすればよいですか?

分類Dev

コマンドラインから既存のプロセスのsystemdスコープを作成するにはどうすればよいですか?

分類Dev

Javaによって作成されたAzure関数は、「パッケージファイルから実行しているため、アプリは現在読み取り専用モードです」と言っていますが、それを解決するにはどうすればよいですか。

Related 関連記事

  1. 1

    コマンドプロンプトからさまざまなパラメータを取得するバックグラウンドプロセスとしてPythonスクリプトを実行するにはどうすればよいですか?

  2. 2

    プロセス置換を使用してコマンドラインからchromeを実行するにはどうすればよいですか?

  3. 3

    マクロがVBAを使用して電子メールまたはデスクトップから実行されているかどうかを確認するにはどうすればよいですか?

  4. 4

    プロセスがWindows自動実行キーから開始されたかどうかを確認するにはどうすればよいですか?

  5. 5

    子プロセスを使用して、親ディレクトリから.classファイルを実行するにはどうすればよいですか?

  6. 6

    プロセスが終了してから実行された時間を確認するにはどうすればよいですか?

  7. 7

    pandasデータフレームの現在の行から前の行を減算して、それぞれの名前でプロセスを再開する新しい列を作成するにはどうすればよいですか?

  8. 8

    dockerode、コンテナ内で実行されているプロセスをノードプロセスから独立させるにはどうすればよいですか?

  9. 9

    プロセスが正常に実行されている場合でも、コアダンプを作成するにはどうすればよいですか?

  10. 10

    n個の子プロセスを生成して同時に実行し、それらの実行時間を測定し、各プロセスが最大実行時間を超えないようにするにはどうすればよいですか?

  11. 11

    subprocess.Popenによって実行されるプロセスから戻り値を取得するにはどうすればよいですか?

  12. 12

    subprocess.Popenによって実行されるプロセスから戻り値を取得するにはどうすればよいですか?

  13. 13

    コマンドラインからプロセスが停止しているかどうかを確認するにはどうすればよいですか?

  14. 14

    各ユーザープロファイルに対してこれらのコマンドを実行するにはどうすればよいですか?

  15. 15

    tkinterからスレッドで実行されているWebSocketにメッセージを送信するにはどうすればよいですか?

  16. 16

    現在カーネルモードで実行されているすべてのプロセスを取得するにはどうすればよいですか?

  17. 17

    InternetExplorerDriver は、findElement メソッド NoSuchWindowException を使用して WebDriverException をスローします。これを止めるにはどうすればよいですか?

  18. 18

    Unityセッションからログアウトする(直前に)ローカルコマンド(スクリプトを実行する)を実行するにはどうすればよいですか?

  19. 19

    Node.jsでプロセスをフォークして、ファイルからではなく、親で使用可能なバッファからJSコードを実行するにはどうすればよいですか?

  20. 20

    実行されたプリペアドステートメントからJSONを作成するにはどうすればよいですか?

  21. 21

    コマンドプロンプトからバックグラウンドで実行されている特定のプロセスを強制終了するにはどうすればよいですか?

  22. 22

    複数のコアでbashを使用してパイプされたプロセスを実行するにはどうすればよいですか?

  23. 23

    Linuxマシンで最後に起動してから作成されたプロセスの数を取得するにはどうすればよいですか?

  24. 24

    Pythonコードからpylintコマンドを実行するにはどうすればよいですか。また、pylintのどの引数が私の必要に応じてログメッセージを作成できますか

  25. 25

    止められないループでこのコードを修正するにはどうすればよいですか?

  26. 26

    RスクリプトをJRIにロードしてJavaから実行するにはどうすればよいですか?

  27. 27

    独立して実行され、メインプロセスが閉じられても実行を継続するサブプロセスをPythonで開始するにはどうすればよいですか?

  28. 28

    コマンドラインから既存のプロセスのsystemdスコープを作成するにはどうすればよいですか?

  29. 29

    Javaによって作成されたAzure関数は、「パッケージファイルから実行しているため、アプリは現在読み取り専用モードです」と言っていますが、それを解決するにはどうすればよいですか。

ホットタグ

アーカイブ