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

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

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

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

Q&A

解決済

1回答

1150閲覧

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

akiyama3284pga

総合スコア186

Linux

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

1グッド

1クリップ

投稿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😄を押しています

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

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

sh

1cmd1 ; cmd21 | cmd22 | cmd23

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

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

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

投稿2022/12/01 05:04

otn

総合スコア84555

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

akiyama3284pga

2022/12/01 05:40

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問