今回は、Linuxの基本的な概念の1つである「プロセス」と「子プロセス」について、わかりやすく解説していきます。
例として、sourceコマンドと./(ドット スラッシュ)を使って、親プロセスと子プロセスの違いを実際に確認する方法もご紹介します。
プロセスとは?
まずは「プロセス」について簡単に説明しましょう。プロセスとは、実行中のプログラムのことです。Linuxでは、システムの起動時から終了時まで、常に多数のプロセスが動いています。
親プロセスと子プロセスの関係
Linuxでは、プロセスは階層構造を持っています。つまり、あるプロセスが別のプロセスを生成することができるのです。
- 親プロセス:他のプロセスを生成したプロセス
- 子プロセス:親プロセスによって生成されたプロセス
例えば、ターミナルを開くと、シェル(例:bash)のプロセスが起動します。このシェルプロセスが親プロセスとなり、ここからコマンドを実行すると、それらは子プロセスとして動作します。
sourceコマンドと./の違い
ここからが本題です。sourceコマンドと./(ドット スラッシュ)を使って、スクリプトを実行する際の違いを見ていきましょう。
sourceコマンド
sourceコマンド(または . コマンド)は、指定したスクリプトを現在のシェル環境で直接実行します。つまり、親プロセスの一部として実行されるのです。
./(ドット スラッシュ)
一方、./を使ってスクリプトを実行すると、新しい子プロセスが作成され、そこでスクリプトが実行されます。
実践:違いを確認しよう
では、実際にこの違いを確認してみましょう。以下の手順で進めていきます。
- テスト用のスクリプトを作成
- sourceコマンドで実行
- ./で実行
- 結果を比較
1. テスト用スクリプトの作成
まず、簡単なテストスクリプトを作成します。
echo '#!/bin/bash
echo "Current PID: $$"
echo "Parent PID: $PPID"
' > test_script.sh
chmod +x test_script.sh
このスクリプトは、現在のプロセスIDと親プロセスIDを表示します。
2. sourceコマンドで実行
echo "Shell PID: $$"
source ./test_script.sh
3. ./で実行
echo "Shell PID: $$"
./test_script.sh
4. 結果の比較
sourceコマンドで実行した場合:
- シェルのPIDと、スクリプト内で表示される「Current PID」が同じになります。
- 「Parent PID」は、ターミナルのプロセスIDになります。
./で実行した場合:
- シェルのPIDと、スクリプト内で表示される「Current PID」が異なります。
- 「Parent PID」は、シェルのPIDと同じになります。
この違いは、sourceコマンドがスクリプトを現在のシェル環境で直接実行するのに対し、./はスクリプトを新しい子プロセスとして実行するためです。
まとめ
今回の実践を通じて、以下のことが分かりました:
- プロセスとは実行中のプログラムのこと。
- 親プロセスは子プロセスを生成できる。
- sourceコマンドは現在のシェル環境(親プロセス)でスクリプトを実行。
- ./はスクリプトを新しい子プロセスとして実行。
これらの違いを理解することで、Linuxでのスクリプト実行やプロセス管理についての理解が深まります。特に、環境変数の扱いや、スクリプトの影響範囲を考える際に重要な知識となります。
Linuxの世界は奥深く、学ぶべきことがたくさんあります。今回の内容を理解したら、次はプロセス管理コマンド(ps、topなど)について学んでみるのもおすすめです。
ぜひ、実際にコマンドを試してみて、プロセスと子プロセスの動きを確認してみてください。実践を通じて学ぶことで、より深い理解が得られるはずです。
Linuxの学習、頑張ってください!
コメント