はじめに
linuC 101の勉強の際にkillallコマンドの動作確認をしたところ、
コマンドがありませんと表示されたため、対応した内容を記事にまとめました。
前提条件
OS CentOS7
対応手順
スクリプトを実行した
スクリプト実行しました。
# cat /tmp/test.sh
#!/bin/bash
sleep 100
バックグランドでスクリプトを実行しました
# /tmp/test.sh &
自分が現在起動しているプロセスを表示した
先程実行したスクリプト「test.sh」っとスクリプト内部のsleepのプロセスが実行中であることを確認した
# ps
PID TTY TIME CMD
1251 pts/0 00:00:00 bash
1399 pts/0 00:00:00 test.sh
1400 pts/0 00:00:00 sleep
1403 pts/0 00:00:00 ps
test.shのプロセスを終了してみた
killについては、以下のサイトが参考になりました。
https://atmarkit.itmedia.co.jp/ait/articles/1604/05/news022.html#sample2
コマンドがありませんというメッセージが出力されました。
# killall -s 15 test.sh
-bash: killall: command not found
whichコマンドで確認
実行されるコマンドの実行ファイルをフルパスで表示しました。
環境変数PATHに含まれているディレクトリに、killallが存在しないことを確認しました。
以下のサイトを参考にしました。
https://atmarkit.itmedia.co.jp/ait/articles/1703/16/news020.html
QiitaではBashでコマンドの存在チェックの記事が大変参考になりました。
https://qiita.com/kawaz/items/1b61ee2dd4d1acc7cc94
# which killall
/usr/bin/which: no killall in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)
コマンドが存在する例
# which kill
/usr/bin/kill
typeコマンドで確認
typeコマンドは、指定したコマンドがbashでどのように解釈されるかを調べるコマンドです。
以下のサイトの説明から引用しました。
https://atmarkit.itmedia.co.jp/ait/articles/1703/16/news020.html
killallはnot foundとなり、コマンドが存在しないことが分かりました。
※rootユーザーはbashが起動していることを確認した。
[root@localhost ~]# cat /etc/passwd | grep root
root:x:0:0:root:/root:/bin/bash
# type killall
-bash: type: killall: not found
※killはbashの組み込みコマンドである
# type kill
kill is a shell builtin
killallのコマンド自体がない事が分かったため、おそらくパッケージのインストールが必要と考えました。
以下のサイトを参考して「psmisc」パッケージをインストールしました。
https://bbs.archlinux.org/viewtopic.php?id=55779
# yum install psmisc
Failed to set locale, defaulting to C
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirror.aktkn.sg
* extras: download.nus.edu.sg
* updates: download.nus.edu.sg
Resolving Dependencies
--> Running transaction check
---> Package psmisc.x86_64 0:22.20-17.el7 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
==================================================================================================================================================== Package Arch Version Repository Size
====================================================================================================================================================Installing:
psmisc x86_64 22.20-17.el7 base 141 k
Transaction Summary
====================================================================================================================================================Install 1 Package
Total download size: 141 k
Installed size: 475 k
Is this ok [y/d/N]: y
Downloading packages:
psmisc-22.20-17.el7.x86_64.rpm | 141 kB 00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : psmisc-22.20-17.el7.x86_64 1/1
Verifying : psmisc-22.20-17.el7.x86_64 1/1
Installed:
psmisc.x86_64 0:22.20-17.el7
Complete!
test.shのプロセスを再度終了してみた
test.shスクリプトのプロセスは終了しました。
# killall -s 15 test.sh
[1]+ Terminated /tmp/test.sh
# killall -s 15 sleep
自分の実行したプロセスを確認した
sleepプロセスとtest.shプロセスが消えていることを確認した
# ps
PID TTY TIME CMD
1251 pts/0 00:00:00 bash
1416 pts/0 00:00:00 ps
まとめ
linuCの勉強ですが、実機でコマンドの動作確認をすると、
うまくいかないことがあるため、大変勉強になります。
コマンドを暗記するだけでなく、手を動かすことでトラブルシューティングを学ぶことが出来ます。
また、killallコマンドが見つかりませんというメッセージについての対応方法ですが、
ネット上にあまり情報がなかったため、Qiitaにまとめました。
誰かのお役に立てたら幸いです。