現状:
エンジニアへの未経験転職。
就職先もほぼ決まり、2月からひよこエンジニアに。
2025年は頑張ろうということで、2025年学習記録6日目。
内容は常に書き散らしのメモです、あしからず。
当面の目標:LPIC101,102合格
select文を用いたファイル操作
-
select
文では、実行するとin
に指定した値に番号が割り振られる。
#!/bin/bash
select command in "list" "delete" "rename" "show" "exit"
do
case $command in
"list" )
ls;;
"delete" )
ls
read -p "Enter file name you eant to delete: " file_name
if [ -f $file_name ];
then
rm $file_name
fi;;
"rename" )
ls
read -p "Enter file name you want to rename: " file_name
read -p "Enter new fole name: " new_file_name
if [ -f $file_name ];
then
mv $file_name $new_file_name
fi;;
"show" )
ls
read -p "Enter file name you want to look: " file_name
cat $file_name;;
"exit" )
break;;
esac
done
実行例
1) list
2) delete
3) rename
4) show
5) exit
#?
上記の場合、#?
でどれを選択するか聞かれているので
1~5の番号を入力するとそれに従った処理が実行される。
ファイルの実行によってアプリが全て落ちる
#!/bin/bash
if [ $# -ne 1 ];
then
echo 'argument is wrong'
exit 1
fi
function stop_exam7() {
rm exam7.lock
exit 0
}
if [ $1 = 'start' ];
then
if [ -f 'exam7.lock' ];
then
echo 'Process is already runnning'
exit 0
else
echo $$ > exam7.lock
trap "stop_exam7" 2 15
for i in `seq 1 1000`;
do
echo $i >> output_$$.txt
sleep 1
done
rm exam7.lock
exit 0
fi
elif [ $1 = 'stop' ];
then
if [ -f 'exam7.lock' ];
then
PID=-1
while read p;
do
PID=$p
done < 'exam7.lock`'
kill -15 $PID
else
echo 'Process is not running'
exit 0
fi
elif [ $1 = 'status' ];
then
if [ -f 'exam7.lock' ];
then
PID=-1
while read p;
do
PID=$p
done < 'exam7.lock'
echo Process is running pid=$PID
else
echo 'Process is not running'
fi
else
echo 'wrong argument'
exit 1
fi
上記コードの下記部分でタイポ有り。
done < 'exam7.lock`'
このタイポによって、
-
ループの最後のPIDだけが保持され、ファイル内に複数のPIDがある場合、最後のPIDのみが
$PID
変数に格納。 -
exam7.lock
ファイルが存在しない、または正しく読み取れない場合、
$PID
変数が-1のままとなり、kill -15 $PID
コマンドがkill -15 -1
として実行 -
kill -15 -1
は、現在のユーザーが所有するすべてのプロセスに対してSIGTERMシグナルを送信するため、様々なアプリケーションが強制終了された。
kill
コマンド
Linuxやmacなどのシステムで実行中のプロセスを終了させるために使用されるコマンド。
基本的な機能
- プロセスIDを指定して、特定のプロセスにシグナルを送信します[1][2]。
- デフォルトでは、TERMシグナル(シグナル番号15)を送信し、プロセスに終了を要求します[2]。
主なオプションとシグナル
- s: 特定のシグナルを指定して送信します[1]。
- l: シグナル名とシグナル番号の対応を表示します[1]。
主なシグナルには以下があります:
シグナル名 | 番号 | 機能 |
---|---|---|
SIGTERM | 15 | 終了 |
SIGKILL | 9 | 強制終了 |
SIGHUP | 1 | 再起動 |
SIGSTOP | 17 | 停止 |
SIGTERM
プロセスに対して終了を要求するシグナル。
特徴と挙動
- シグナル番号は15です[1][4]。
- プロセスに対して適切な方法で終了するよう要求します[4]。
- killコマンドのデフォルトシグナルとして使用されます[2]。
- プロセスは終了処理を実行できる機会が与えられます[2]。
- プログラムにSIGTERMのハンドラーがある場合、終結処理を行って秩序正しく終了することができます[2]。
- アプリケーションによっては、SIGTERMを受信しても実際には終了しない場合があります[2]。
- SIGKILLとは異なり、プロセスがこのシグナルを捕捉し、必要な終了処理を実行することができます[1]。
- 多くのデーモンプログラムでは、SIGTERMを受信すると、子プロセスの終了処理や一時ファイルの削除などのクリーンアップ処理を行ってから終了します[1]。
Citations:
[1] https://qiita.com/Kernel_OGSun/items/e96cef5487e25517a576
[2] https://www.ibm.com/docs/ja/aix/7.2?topic=management-process-termination
[3] https://qiita.com/toshihirock/items/bc6a9a4091afa9bb61f1
[4] https://qiita.com/dingtianhongjie/items/3469d147152d929d7bff
[5] https://ascii.jp/elem/000/001/467/1467705/
[6] https://pawsole.com/kill/
[7] https://ja.wikipedia.org/wiki/シグナル_(Unix)
[8] https://docs.oracle.com/cd/E19253-01/819-0379/eoizf/index.html
使用例
-
プロセスを通常終了させる:
kill PID
-
プロセスを強制終了させる:
kill -9 PID
-
複数のプロセスを同時に終了させる:
kill PID1 PID2 PID3
注意点
- SIGKILLシグナルは、プロセスが無視できない強制終了シグナルです[2]。
- 通常は、まずSIGTERMを試し、それが効かない場合にSIGKILLを使用することが推奨されます。
Citations:
[1] https://uxmilk.jp/50638
[2] https://pawsole.com/kill/
[3] https://codezine.jp/unixdic/w/kill
[4] https://atmarkit.itmedia.co.jp/ait/articles/1604/05/news022_2.html
[5] https://docs.oracle.com/cd/E19455-01/806-2668/processmanagerusing-62/index.html
[6] https://www.miraiserver.ne.jp/column/linux_process/
kill -1
コマンドによって再起動されたもの
/sbin/launchd
- macOSの中核となるシステムプロセス。
主な機能
-
システム起動管理:
- macOSの起動時に最初に実行されるプロセスです[1][2]。
- カーネルの直後に立ち上がり、プロセスID (PID) は0か1です[1]。
-
サービス管理:
- 他のデーモン、アプリケーション、プロセス、スクリプトの起動・停止・管理を行います[2]。
- システムサービスやユーザーレベルのサービスを管理します。
-
オンデマンド起動:
- 必要に応じてサービスを起動し、不要なときは停止させます[1]。
-
監視機能:
- 実行中のサービスを監視し、必要に応じて再起動します[2]。
特徴
-
継続的実行: バックグラウンドで常に動作し、システムの安定性を維持します[1]。
-
リソース効率: 多くの場合、リソースの使用量は最小限に抑えられています[1]。
-
設定管理:
.plist
ファイルを使用して、サービスの設定を管理します[3]。
関連ツール
- launchctl: launchdを制御するためのコマンドラインツールです[2]。
- LaunchControl: launchdの管理を容易にするGUIツールです[4]。
launchdは、macOSの自動化や定期的なタスク実行に非常に有用なツールであり、従来のcronに代わる現代的なソリューションとして位置づけられています[4][5]。
Citations:
[1] https://macpaw.com/ja/how-to/launchd-process-mac
[2] https://ja.wikipedia.org/wiki/Launchd
[3] https://dev.classmethod.jp/articles/mac-launch-agents/
[4] https://qiita.com/nori3tsu/items/39cf1ca8ca779f9d074f
[5] https://ai.hack-le.com/mac-launchd/