【RHEL】sourceコマンドと./で親プロセスと子プロセスの違いを確認

RHEL

今回は、Linuxの基本的な概念の1つである「プロセス」と「子プロセス」について、わかりやすく解説していきます。

例として、sourceコマンドと./(ドット スラッシュ)を使って、親プロセスと子プロセスの違いを実際に確認する方法もご紹介します。

プロセスとは?

まずは「プロセス」について簡単に説明しましょう。プロセスとは、実行中のプログラムのことです。Linuxでは、システムの起動時から終了時まで、常に多数のプロセスが動いています。

親プロセスと子プロセスの関係

Linuxでは、プロセスは階層構造を持っています。つまり、あるプロセスが別のプロセスを生成することができるのです。

  • 親プロセス:他のプロセスを生成したプロセス
  • 子プロセス:親プロセスによって生成されたプロセス

例えば、ターミナルを開くと、シェル(例:bash)のプロセスが起動します。このシェルプロセスが親プロセスとなり、ここからコマンドを実行すると、それらは子プロセスとして動作します。

sourceコマンドと./の違い

ここからが本題です。sourceコマンドと./(ドット スラッシュ)を使って、スクリプトを実行する際の違いを見ていきましょう。

sourceコマンド

sourceコマンド(または . コマンド)は、指定したスクリプトを現在のシェル環境で直接実行します。つまり、親プロセスの一部として実行されるのです。

./(ドット スラッシュ)

一方、./を使ってスクリプトを実行すると、新しい子プロセスが作成され、そこでスクリプトが実行されます。

実践:違いを確認しよう

では、実際にこの違いを確認してみましょう。以下の手順で進めていきます。

  1. テスト用のスクリプトを作成
  2. sourceコマンドで実行
  3. ./で実行
  4. 結果を比較

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コマンドがスクリプトを現在のシェル環境で直接実行するのに対し、./はスクリプトを新しい子プロセスとして実行するためです。

まとめ

今回の実践を通じて、以下のことが分かりました:

  1. プロセスとは実行中のプログラムのこと。
  2. 親プロセスは子プロセスを生成できる。
  3. sourceコマンドは現在のシェル環境(親プロセス)でスクリプトを実行。
  4. ./はスクリプトを新しい子プロセスとして実行。

これらの違いを理解することで、Linuxでのスクリプト実行やプロセス管理についての理解が深まります。特に、環境変数の扱いや、スクリプトの影響範囲を考える際に重要な知識となります。

Linuxの世界は奥深く、学ぶべきことがたくさんあります。今回の内容を理解したら、次はプロセス管理コマンド(ps、topなど)について学んでみるのもおすすめです。

ぜひ、実際にコマンドを試してみて、プロセスと子プロセスの動きを確認してみてください。実践を通じて学ぶことで、より深い理解が得られるはずです。

Linuxの学習、頑張ってください!

 

【注意】

このブログは技術に関する知識や経験を共有することを目的としており、情報の正確性に努めていますが、その内容の正確性や完全性を保証するものではありません。ブログの情報を利用する場合は、自己の責任において行動してください。ブログの内容に基づいて行った行動や決定によって生じた損害や被害について、筆者は一切の責任を負いません。

 

記事の内容の一部は、生成AIで作成しています。

RHEL
この記事の作者
StarTeller

30歳で異業種からITエンジニアへ転身し、10年以上にわたりインフラエンジニアとして様々な現場でシステム構築・運用に携わってきました。

得意分野はLinux/Windowsのサーバー構築・運用で、ネットワークやAWSなども実務で活用しています。

このブログでは、これまでの業務で培った経験を基に、日々の業務で遭遇した問題の解決方法や、システム構築の具体的な手順を解説。現場のエンジニアが実際に「困ったとき」に参照できる情報を意識して投稿していこうと思っています。

StarTellerをフォローする
StarTellerをフォローする

コメント

タイトルとURLをコピーしました