質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.12%
Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

解決済

シェルがジョブ制御のためにプロセス生成時にしていることの確認

akiyama3284pga
akiyama_pga

総合スコア186

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

1回答

1グッド

1クリップ

445閲覧

投稿2022/11/28 05:51

編集2022/11/30 01:13

fork() (ないしfork()->execev()) すると、プロセスグループは親のものと同じになると思います。
しかし、ターミナルから実行したプロセスについては、sidは親のシェルと同じですが、pgidについては別のものとなっています。

targetはloop.pyプログラム

psAocommand,pgid,sid

1COMMAND PGID SID 2・・・ 3-bash 1092 1091 4python loop.py 1354 1091

間違いなく、親はbashであり、その子として実行されています。

psaxf

1 PID TTY STAT TIME COMMAND 2・・・ 31092 tty4 S 0:00 \_ -bash 41356 tty4 R 0:02 \_ python loop.py

イメージ説明

これが意味するところは、シェルはfork() -> execev()の処理周りで、実行するプロセスを同セッション内で、別プロセスグループにしているという認識でよろしいでしょうか?(具体的にはsetpgid()のような関数を実行している?)
それにフォアグランドジョブやバックグラウンドジョブを一対一で対応付けることで、ジョブ制御を可能としていると

--追記
・シェルとひとまとめにしてしまいましたが、ここではジョブ制御ができないbourneシェル等ではなく、bashのようなシェルを想定しています。

・フォアグランドやバックグラウンドといった属性はtcsetpgrp()等で行うようです。

melian😄を押しています

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

回答1

1

ベストアンサー

プロセスグループは、ジョブ単位です。
あるいは、同じ事ですが、パイプライン単位。

sh

1cmd1 ; cmd21 | cmd22 | cmd23

cmd21,22,23は同じプロセスグループ、cmd1はそれと別のグループ。

端末で、Ctrl-C キーを押すと、直近のtcsetpgrpで設定されたプロセスグループIDに対して、SIGINTが送られます。
(プロセスグループIDに負号を付けてグループ全体へのシグナルとなる)

man bashの「ジョブ制御」は読んでますか?

投稿2022/12/01 05:04

otn

総合スコア80401

akiyama_pgaを押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

akiyama3284pga

2022/12/01 05:40

いつもありがとうございます。 大きな誤認はないようで安心いたしました。 ジョブ制御とはシェル都合の概念である以上そのための所作業はシェルが行う(あるいわカーネルに依頼)、それをカーネルと協調するために端末ドライバにも対応するための仕組みが組み込まれている必要で、 あるプロセスが該当シェルで起動されるとき、setpgid->tcsetpgrp()のようにシェルがジョブ管理のための一連の流れを行う。 ジョブ制御に関しては端末ドライバと並行して学ぶ必要があると思いました。 man bashで大筋の流れはよく理解できましたが、 具体的にどのような関数が、 ./my.exe が打ち込まれたときに行われて、グループの変更・フォア/バックのタグ付けが行われているのかが気になったため質問いたしました。

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.12%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。