AIマーケティング業界は、 -u および -a オプションは追加情報を提供します。その他のオプションとその機能については、情報ページを参照してください。
次のセクションでは、1 つのプロセスが別のプロセスを作成する方法について説明します。
4.1.5. プロセスの生と死
4.1.5.1. プロセスの作成
既存のプロセスが自身の完全なコピーを作成するため、新しいプロセスが作成されます。この子プロセスは親プロセスと同じ環境を持ち、プロセスID番号のみが異なります。この手順は次のように呼ばれます。 フォーク.
プロセスがフォークされた後、子プロセスのアドレス空間は新しいプロセスデータで上書きされます。これは、 exec システムへの呼び出し。
AIマーケティング業界は、 フォークアンド実行 このメカニズムは、古いコマンドを新しいコマンドに切り替えますが、新しいプログラムが実行される環境(入出力デバイスの設定、環境変数、優先度など)は同じままです。このメカニズムはすべてのUNIXプロセスの作成に使用されているため、Linuxオペレーティングシステムにも適用されます。最初のプロセスであっても、 INITプロセスID 1のプロセスは、
いわゆる ブートストラップ 手順。
この図は、fork-and-exec メカニズムを示しています。fork 処理後にプロセス ID が変更されます。
図4-1. フォークアンド実行メカニズム
いくつかのケースでは、 INIT プロセスの親になるが、そのプロセスは INITすでに見たように、 pstree 例えば、多くのプログラムは、 デーモン化する 子プロセスは、親プロセスが停止したり停止されたりしても動作を継続できるように、子プロセスに制御権を与える。ウィンドウマネージャは典型的な例で、 xterm コマンドを受け入れるシェルを生成するプロセス。ウィンドウマネージャはそれ以上の責任を放棄し、子プロセスを INITこのメカニズムを使用すると、実行中のアプリケーションを中断することなくウィンドウ マネージャーを変更することができます。
たとえ良好な家族であっても、時には問題が発生することがあります。例外的なケースとして、親プロセスが完了を待たずに、あるプロセスが完了することがあります。このような埋もれていないプロセスは「埋もれていないプロセス」と呼ばれます。 ゾンビ プロセス。
4.1.5.2. プロセスの終了
プロセスが正常に終了した場合(強制終了されたり、予期せぬ中断が行われたりしていない場合)、プログラムは 終了ステータス 親プロセスへ。この終了ステータスは、プログラムの実行結果を示す数値です。ジョブ実行時に情報を返すシステムは、UNIXが書かれたC言語に由来しています。
戻りコードは親プロセスまたはスクリプトによって解釈されます。戻りコードの値はプログラム固有です。この情報は通常、指定されたプログラムのマニュアルページに記載されています。例えば、 grep コマンドは戻ります -1 一致するものが見つからない場合は、「ファイルが見つかりません」というメッセージが表示される。別の例としては、Bashの組み込みコマンドである trueは、成功を意味する終了ステータス 0 を返す以外は何も行いません。
4.1.5.3。 信号
プロセスはシグナルを受信すると終了します。プロセスに送信できるシグナルは複数あります。 kill プロセスにシグナルを送るコマンド。コマンド kill -l シグナルのリストが表示されます。ほとんどのシグナルはシステム内部での使用、またはプログラマがコードを書く際に使用されます。ユーザーとして必要なシグナルは以下のとおりです。
表4-2. 共通信号
信号名 | 信号番号 | 意味 |
シグターム | 15 | プロセスを規則的に終了します。 |
SIGINT | 2 | プロセスを中断します。プロセスはこのシグナルを無視できます。 |
シグキル | 9 | プロセスを中断します。プロセスはこのシグナルを無視できません。 |
シグアップ | 1 | デーモンの場合: 設定ファイルを再度読み込みます。 |
プロセスにシグナルを送信する際に実行されるデフォルトのアクションの詳細については、 man 7 信号.
4.1.6. SUID と SGID
前章で約束した通り、SUIDとSGIDという特殊モードについてより詳しく説明します。これらのモードは、UNIXベースのシステムで使用されている厳格なファイルパーミッションスキームのために通常は実行できないタスクを、一般ユーザーに実行させるために存在します。理想的には、特殊モードはセキュリティリスクを伴うため、可能な限り控えめに使用されます。Linux開発者は一般的に、これらの特殊モードを可能な限り避けようとしてきました。Linux ps たとえば、バージョンは、 / proc 誰でもアクセスできるファイルシステムであるため、機密性の高いシステムデータやリソースが一般公開されることを回避できます。それ以前のUNIXシステムでは、 ps プログラムは次のようなファイルへのアクセスを必要とします / dev / mem および / dev / kmem、これらのファイルの権限と所有権が原因で次のような欠点がありました。
リタ:~> ls クルー----- | -l | /dev/*メモリ 1ルート | km em | 1, | 2年30月22日 30:XNUMX /dev/kmem |
クルー----- | 1ルート | km em | 1, | 1月30日 22日 30:XNUMX /dev/mem |
古いバージョンの場合 ps特別なモードを適用しない限り、一般ユーザーとしてプログラムを起動することはできませんでした。
通常、特別なモードの適用は避けますが、SUIDの使用が必須となる場合もあります。例えば、パスワード変更の仕組みです。もちろん、ユーザーはシステム管理者にパスワードを設定してもらうのではなく、自分でパスワードを変更したいと考えるでしょう。ご存知のとおり、ユーザー名とパスワードは /etc/passwd ファイルには次のアクセス権限と所有者があります:
ビー:~> ls -l /etc/passwd
-rw-r--r-- 1 ルート ルート
1267 16月14日 43:XNUMX /etc/passwd
ビー:~> ls -l /etc/passwd
-rw-r--r-- 1 ルート ルート
それでも、ユーザーはこのファイル内の自分の情報を変更できる必要があります。これは、 passwd
プログラムの特別な権限:
ミア:~> どのパスワード
passwdは/usr/bin/passwdです
ミア:~> どのパスワード
passwdは/usr/bin/passwdです
ミア:~> ls -l /usr/bin/passwd
-rs--x--x 1 ルート ルート
13476 7月 06日 03:XNUMX /usr/bin/passwd*
ミア:~> ls -l /usr/bin/passwd
-rs--x--x 1 ルート ルート
呼び出されると、 passwd コマンドは、以下のアクセス権限を使用して実行されます。 ルートこれにより、一般ユーザーがシステム管理者が所有するパスワードファイルを編集できるようになります。
ファイルのSGIDモードはSUIDほど頻繁には使用されません。SGIDは多くの場合、追加のグループの作成を伴うためです。しかし、場合によっては、洗練されたソリューションを構築するために、この面倒な手順を踏まなければなりません(これについてはあまり心配する必要はありません。必要なグループは通常、インストール時に作成されます)。これは、 書きます および wall 他のユーザーの端末(tty)にメッセージを送信するために使用されるプログラム。 書きます コマンドは単一のユーザーにメッセージを書き込みますが、 wall 接続されているすべてのユーザーに書き込みます。
通常、他のユーザーの端末やグラフィカルディスプレイにテキストを送信することは許可されていません。この問題を回避するために、すべての端末デバイスを所有するグループが作成されています。 書きます および wall コマンドにSGID権限が付与されている場合、コマンドはこのグループに適用されるアクセス権を使用して実行されます。 TTY この例では、このグループは宛先端末への書き込みアクセス権を持っているため、その端末を使用する権限を持たないユーザーでもメッセージを送信できます。
以下の例では、ユーザー ジョー まず、相手がどの端末に接続しているかを調べます。 who コマンドを使って彼女にメッセージを送信します。 書きます コマンド。また、アクセス権も示されています。 書きます プログラムと受信ユーザーが占有する端末上: ユーザー所有者以外には、デバイスへの書き込み権限がないことは明らかです (グループ所有者だけが書き込み権限を持ちます)。
ジョー:~> 書く
書き込みは/usr/bin/writeです
ジョー:~> ls -l /usr/bin/write
-rwxr-sr-x 1 ルート tty
8744 5月 00日 55:XNUMX /usr/bin/write*
ジョー:~> 書く
書き込みは/usr/bin/writeです
ジョー:~> ls -l /usr/bin/write
-rwxr-sr-x 1 ルート tty
ジョー:~> who
ジェニー tty1
ジェニー ポイント/1
ジェニー ポイント/2
ジェニー ポイント/3
ジョー ポイント/0
23月11日 41:XNUMX
23月12日 21:0 (:XNUMX)
23月12日 22:0 (:XNUMX)
23月12日 22:0 (:XNUMX)
20月10日 13:XNUMX (lo.callhost.org)
ジョー:~> who
ジェニー tty1
ジェニー ポイント/1
ジェニー ポイント/2
ジェニー ポイント/3
ジョー ポイント/0
ジョー:~> ls -l /dev/tty1
crw--w---- 1 ジェニー tty 4,
1月23日 11:41 /dev/tty1
ジョー:~> ls -l /dev/tty1
crw--w---- 1 ジェニー tty 4,
ジョー:~> ジェニーtty1に書き込み
ねえジェニー、一緒にランチしませんか?
^C
ジョー:~> ジェニーtty1に書き込み
ねえジェニー、一緒にランチしませんか?
^C
ユーザー ジェニー 彼女の画面にはこう表示されます:
からのメッセージ [メール保護] ptys/1 12:36 ... ねえジェニー、一緒にランチしませんか?
EOF
からのメッセージ [メール保護] ptys/1 12:36 ... ねえジェニー、一緒にランチしませんか?
EOF
メッセージを受信した後、端末は Ctrlキー+L キーの組み合わせ。システム管理者からのメッセージを除き、一切のメッセージを受信しないようにするには、 メッセージ コマンドを使用します。接続中のユーザーが他のユーザーからのメッセージを受け入れるかどうかを確認するには、 who -wすべての機能は各コマンドの情報ページで詳しく説明されています。
グループ名は異なる場合があります
グループスキームはディストリビューションに固有のものです。他のディストリビューションでは、異なる名前や異なるソリューションが使用される場合があります。