ここから本文です

シェルスクリプト 無限ループについて2点聞きたいです. 1.無限ループ中の...

アバター

ID非公開さん

2017/11/2912:44:48

シェルスクリプト

無限ループについて2点聞きたいです.

1.無限ループ中のsleep関数の必要性
2.無限ループ中のCtrl+Cによる中断

1.sleep関数の必要性

あるサイトで以下のようなコードを見かけましたが,
無限ループ中のsleep関数の必要性を教えてください.

------------------------------
i=0
while : ; do
echo $(( i++ ))
sleep 1
done
------------------------------

2.無限ループ実行中のCtrl+Cにおける中断

私の作ったスクリプトファイルの無限ループ中に
Ctrl+Cを実行すると中断することが出来ず,以下のようなコードが表示されました.

意図してることはなんなのでしょうか?
また,正常に終了させるためにはどうするべきなのでしょうか?
具体的なプロセス名は伏せてあります.

------------------------------
^C... terminating ~ client
-----中略-----
^CTraceback (most recent call last):
-----中略-----
KeyboardInterrupt
------------------------------

閲覧数:
56
回答数:
1
お礼:
50枚

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

nan********さん

2017/11/2913:51:00

1.Sleep の必要性
sleep をしないと、本当にプロセスが高速でループしてしまいます。
そうすると、CPU の資源を無駄にしてしまいます。
sleep だと指定している時間だけ本当に 止まってくれるので CPU が無駄になりません。
2.Ctrl+C
これは、普通は終了します。
シェルが、実行しているプロセスに、INT シグナルを送っています。
http://equj65.net/tech/linuxprocessgroup/

プロセスは、デフォルトでは INT シグナルを受信すると exit します。
でも、INT シグナルの受信を禁止にしたり、終了しない別のハンドラを設定してあると、終了しなくなります。
また、ハードの入出力中なんかでシグナルの処理が待たされている場合もあります。
よくディスクが壊れると固まってしまったりするのは、このためです。

  • アバター

    質問者

    ID非公開さん

    2017/11/2915:12:26

    回答有り難うございます.

    2.無限ループ実行中のCtrl+Cにおける中断 について

    INT シグナルの受信を禁止にしたり、終了しない別のハンドラを設定してある場合に,
    Ctrl+Cで終了させたい場合にはどうしたらよいのでしょうか?

  • その他の返信(2件)を表示

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo!知恵袋カテゴリ

一覧を見る

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる