プロセスの振舞いでよく分からない点がありますので、
この点に詳しい方、ぜひご教授下さい。
実験として、次のような無限ループをもつシェルスクリプトを作りました。
#!/bin/sh
while :
do
echo "hogehoge" > tmp
echo "Please stop me!"
sleep 1
done
このfile名を loop.sh として、実行属性を付けてから
$ ./loop.sh &
とバックグラウンドで実行してみます。
すると、1秒毎に、tmpにhogehogeと書き込まれ
標準出力にPlease stop me!と標準出力に表示されますが、
ここで、 exitコマンドでterminalを急に閉じてみます。
こうした場合、どうやら、このプロセスは何処かで生き続けるようなのです。
というのも、新たにterminalを起動し、上で出来た tmp をrmで消そうとしても、
すぐ新たなtmpが作られるからです。
しかも、単にlogoutしただけではこのプロセスは死なないようです。
(再起動するとさすがに止まります。)
そこで質問ですが、
1) 上のプロセスが生き続けていることを確認する方法はありますか?
2) この生き続けたプロセスを再起動せずに殺す方法はありますか?
3) このようにシェルスクリプト実行中に急にexitをされた場合でも、
スクリプトが正常終了するように予めスクリプトを組むことは出来ますか?
以上3点についてご教授いただけたら幸です。
よろしくお願いします。
No.3ベストアンサー
- 回答日時:
バックグラウンドプロセスはログアウト時に終了させないのがLinuxの仕様みたいですよ。
参考URLの一番下に書いてあります。3についてはtrapを使ってシグナル処理を行うことです。
バックグラウンドで動かしている時にログアウトを検知して終了させたいということであれば、定期的にログイン中のユーザーをチェックさせればよいと思います。
参考URL:http://www.glasscom.com/tone/linux/BasicOperatio …
>バックグラウンドプロセスはログアウト時に終了させないのがLinuxの仕様みたいですよ。
どうやらそのようですね。初めて知りました。ありがとうございます。
tcshの場合、
バックグラウンドで動かした特定のプロセスをexitに連動して止めたい場合は
起動される側でなく、起動する側で
hup loop.sh &
のように指定してやればよいようです。
bash の場合はそのようなことができるか否かは不明です。
もしそれが出来ないとすると、スクリプトに
trap exit SIGHUP
と書いても、そもそもバックグラウンドジョブにシグナルが送られないので
自動的に止めることはできないようです。
起動される側が自律的に終了するには、ご教授いただいたように、
定期的にログイン中のユーザーをチェックする等が必要のようですね。
ありがとうございました
No.4
- 回答日時:
おはよう。
3)わざわざ割り込みを手動で投げてtrapさせるのが億劫な場合は
呼び出し元のプロセスIDが$PPIDに入ってるんで
ループの中のどこかに
test `ps | awk '{print $1}' | grep $PPID` || 終了るーちん または exit
みたいな処理を入れてみたらどうかな。
PPIDのプロセスがなくなってたら云々という意味です。
なるほど~こういう手もあるのですね。
この方法で起動された側で自律的に終了させることができました。
呼び出し元のプロセスIDが$PPIDに入ってるってのも初めて知りました。
この手法は応用が効きそうですね。
勉強になりました。ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(学校・勉強) この中で間違ってある説明はありますか?詳しい方に教えていただきたいです。 A. 1つのプログラムが複 2 2023/07/14 01:15
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- 日本株 SBI証券HYPER SBI 2のエラー 1 2023/01/31 13:38
- Visual Basic(VBA) vba メモリ節約 3 2022/09/16 21:45
- UNIX・Linux cronの@rebootでのdateコマンドの実行につきまして 2 2023/06/11 16:23
- C言語・C++・C# プログラミングの問題です。至急教えてください。 /***から***/の部分をプログラミングにしてほし 1 2022/10/13 11:48
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/11 11:05
- 歴史学 山上徹也、「山上家」の家系や先祖、一族の調査はしてますか? 4 2022/07/11 23:39
- 環境学・エコロジー 二酸化炭素の排出 1 2023/08/07 16:40
- 政治 私は文部科学省ヘ入り込んで投稿した私の建議文を彼らが私の依頼まましましょうか。? 2 2023/08/22 07:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ubuntu(linux)のシャットダウン...
-
bashでシングルクォート内の変...
-
Linux Mint 日本語入力できなく...
-
ubuntuのシャットダウンが進ま...
-
AWSでSSH接続をしたいのですが...
-
テキストファイルをページ番号...
-
2TBのUSBメモリを2000円ほどで...
-
Ubuntuで数字だけのユーザーア...
-
Linux のシェルスクリプトの強...
-
tarで纏める際に、複数場外した...
-
ubuntuで デイスク/deb/loopと...
-
ssl_error_logのエラー内容(AH...
-
ログにserver reached MaxReque...
-
lubuntuのインストールが終わり...
-
e4defragコマンドでデフラグ
-
[Linux初心者]Ubuntu22.04.3LTS...
-
Ubuntu系とCentOS系の違いはな...
-
Linuxのパーティション番号の変...
-
Windowsのローカルディレクトリ...
-
プログラミングPC、LinuxのOSパ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
bashでシングルクォート内の変...
-
ubuntu(linux)のシャットダウン...
-
AWSでSSH接続をしたいのですが...
-
Linuxのパーティション番号の変...
-
ubuntuで デイスク/deb/loopと...
-
自作のウェブサイトを友人に見...
-
ubuntuのシャットダウンが進ま...
-
[Linux初心者]Ubuntu22.04.3LTS...
-
Ubuntu系とCentOS系の違いはな...
-
Ubuntu on Xorgのログインについて
-
Windowsのローカルディレクトリ...
-
tarで纏める際に、複数場外した...
-
Linux のシェルスクリプトの強...
-
Ubuntuで数字だけのユーザーア...
-
linuxサーバーのキャッシュをク...
-
shellscript内のコマンドを、su...
-
ssl_request_logの必要性について
-
ubuntuのサーバー(virtual box)...
-
Kali Linuxで起動できない - Mi...
-
ホストオンリーアダプタで接続...
おすすめ情報