• ベストアンサー

shの停止方法

こんばんわ。 shの停止方法がわからなくて困っています。 sh(qqq.sh)の内容は ******************* while true ; do sh xxx.sh sleep 1 done ******************* と、xxx.shを1秒ごとに起動するようにしています。 ですので、killコマンドでは1秒ごとに起動しているために早すぎてプロセスを停止できませんでした。 shのコマンドは #sh qqq.sh & で常駐するようにしました。 すごくこまっているのでご教授お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#9431
noname#9431
回答No.2

>killコマンドでは1秒ごとに起動しているために早すぎてプロセスを停止できませんでした。 これはどういうことでしょう?sleepの間隔とkillできるか否かに相関はないと思うのですが。。。 ps -ax | grep qqq.sh でqqq.shのプロセスIDを調べて、 kill プロセスID それでも死ななければ kill -KILL プロセスID です。

jun2249
質問者

補足

回答ありがとうございます。 えーっと私も確かにqqq.shのプロセスを止めてしまえばいいのではないかと思いましたが、ps axをかけたときに立ち上がっているプロセスがqqq.shではなくsleep1というようなプロセスになっていました。 なので1秒ごとにsleep1というプロセスが立ち上がっていたのでそれを止める方法が知りたかったのです。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

  • notnot
  • ベストアンサー率47% (4856/10272)
回答No.4

>1秒ごとにsleep1というプロセスが立ち上がっていたのでそれを止める方法が知りたかったのです。 sleep 1は放っておいても1秒後には止まりますので、コマンドを打っている間に止まってしまいます。 大元の、sh qqq.sh を止めれば次から次へとsleepやsh xxx.shが起動されることがなくなりますので、#2の方の書かれているようにしてkillするのが良いかと思います。 あるいは、jobsコマンドを打つと、 [1]+Running sh qqq.sh & のように表示されると思うので、その[ ]内の数字を使って、kill %1 としてもいいです。

全文を見る
すると、全ての回答が全文表示されます。
noname#9431
noname#9431
回答No.3

>1秒ごとにsleep1というプロセスが立ち上がっていたのでそれを止める方法が知りたかったのです。 ps -ax | awk '/sleep/{print $1}' | xargs kill でどうでしょ?

全文を見る
すると、全ての回答が全文表示されます。
  • mendokusa
  • ベストアンサー率13% (359/2726)
回答No.1

親のプロセスを殺せばその内止まるのでは。しばらくは動いてるかもしれません。

jun2249
質問者

補足

回答ありがとうございます。 えーっと私も確かにqqq.shのプロセスを止めてしまえばいいのではないかと思いましたが、ps axをかけたときに立ち上がっているプロセスがqqq.shではなくsleep1というようなプロセスになっていました。 なので1秒ごとにsleep1というプロセスが立ち上がっていたのでそれを止める方法が知りたかったのです。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 無限ループについて(while true~)

    たびたびお世話になります。 管理しているサーバーとデータベースの接続確認を、30分に一度行っているのですが、この際に入力していたコマンドが無限ループから抜け出すことができなくなってしまいました。 入力していたコマンドは、while true; do ./aaa.sh ; sleep 1800; doneです。 30分に一度、aaa.shを起動させて接続を確認する、というつもりで入力していたものなのですが…。 無限ループに気付き、プロセスをrootからkill(-kill) しても復活(?)してしまうようです。 このままでは問題があるため、なんとか無限ループを抜け出したいのですが、いい方法はありませんでしょうか? OSはLinuxです。 申し訳ありませんが、初心者中の初心者のため、必要な情報があまりわかりません。不足がありましたら、補足要求お願いします。

  • snoopコマンドをcshからkill出来ない

    soralis初心者です。 サーバの資料採取のため、以下の概要のcshを組み、クーロン登録しております。 (1)snoop起動(snoop1.csh ,snoop2.csh) snoop -o XXX01.snoop -d XXX01 snoop -o XXX02.snoop -d XXX02 (2)シェルの停止(snoopkill.csh) pgrep -f 'snoop' | xargs kill (1)の起動自体はうまく行えているのですが、 (2)の処理をcshから起動すると、プロセスが死にません。 ※詳細 (2)をクーロンから実行後、cshのプロセスは死んでいるが、 snoopコマンド自体のプロセスが生きたままになり、 snoopログが無限に作り続けられている状態です。 コマンド(pgrep -f 'snoop' | xargs kill)を直接コマンドラインから 入力すると、snoopのプロセスは全て死にました。 cshと通常のコマンド入力ではkillの作用が異なるのでしょうか? 御回答をよろしくお願いします。 --------------------------------------------------------- (1)起動後のプロセス状態 pgrep -lf 'snoop' 88889 sh -c /XXX/snoop1.csh 88888 sh -c /XXX/snoop2.csh 77777 snoop -o XXX01.snoop -d XXX01 77776 snoop -o XXX02.snoop -d XXX02 --------------------------------------------------------- --------------------------------------------------------- (2)起動後(クーロン)のプロセス状態 pgrep -lf 'snoop' 77777 snoop -o XXX01.snoop -d XXX01 77776 snoop -o XXX02.snoop -d XXX02 --------------------------------------------------------- --------------------------------------------------------- (2)のコマンドをコマンドラインから実行後のプロセス状態 pgrep -lf 'snoop' ---------------------------------------------------------

  • n秒毎に処理を繰り返す方法

    例えばあるコマンドの実行結果を、5秒毎のファイルに出力させたいと思い、 以下のようなシェルを作ったとします。 (例のため、あえて無限ループとしています) ---------[test.sh]--------- #!/bin/sh while : do command >> tmp.out sleep 5 done exit --------------------------- この場合、 "5秒毎" ではなく、 "commandが終了してから5秒後に処理を繰り返す" になってしまい、commandにかかる処理時間も含めると正確に5秒おきではなくなってしまいます。 コレを回避する方法はありますでしょうか? 例えばcommandの処理時間が1~2秒程度かかっても、正確に"5秒おき"にcommandを走らせたいです。 もう少し補足すると、 5秒毎に720回処理を繰り返すスクリプトを、1時間おきに起動するようにcron登録して、 起動後、55分55秒で終了、という動きを想定しています。 宜しくお願い致します。

  • killでプロセスを終了したときの”終了しました”を表示させたくない

    お世話になります。 下記の内容のシェルスクリプトを実行すると数字の1~5が表示され最後に”終了しました”(LANG=Cだと”Terminated”)と表示されます。この”終了しました”を表示させたくないのですが何か良い方法はありますでしょうか? よろしくお願い致します。 ------- 以下シェルスクリプト -------- #!/bin/sh i=0 ( while : do sleep 1 done & ) | while : do echo $i if [ $i -eq 5 ];then kill -TERM 0 fi i=`expr $i + 1` done

  • プログラムの一時停止について

    Linuxである計算プログラムを実行しています。そのパソコンをシャットダウンする必要があるので、現在動いているそのプログラムをシャットダウン前に停止して、パソコンの再起動後に計算も復帰させたいと思っております。そのプログラムに一時停止機能はございませんので、OS側でその作業を行いたいと思っています。 はじめ、”kill -STOP プロセスID”でプログラムを停止して、”kill -CONT プロセスID”で復帰できると思ったのですが、それで復帰させようと思うと、そのようなプロセスIDはありませんというエラーメッセージが出ました・・・。パソコンを停止しなければ、そのコマンドで上手く停止・復帰が出来たのですが・・・。 パソコンを再起動しても、実行プログラムを停止・再開させる方法をご存知の方がいれば、是非アドバイスを頂きたいです。

  • 死なない(不思議な?)プロセスの振舞いについて

    プロセスの振舞いでよく分からない点がありますので、 この点に詳しい方、ぜひご教授下さい。 実験として、次のような無限ループをもつシェルスクリプトを作りました。 #!/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点についてご教授いただけたら幸です。 よろしくお願いします。

  • 標準出力について

    シェルでシェルを呼び出す処理をバックグラウンドで行っています。その処理を行っている時にログアウトすると、ttyが"?"となってプロセスが残ります。 ここで質問なのですが、この"?"となったプロセスからの標準出力はどこに行われるのでしょうか? 簡単なシェルを書きますと、 TEST1.sh・・・・ #!/bin/sh TEST2.sh & exit 1 TEST2.sh・・・・ #!/bin/sh while true do echo "TEST" done exit 1 で、TEST1.shを呼び出します。 簡単に書くと上記の様な処理となりますが、echo "TEST"はどこに出力されるのか分かる方がいらっしゃいましたらご教授下さい。よろしくお願いします。

  • Unixの親プロセスと子プロセスの関係について

    はじめまして。 親プロセスが終了するとそのプロセスから呼ばれた 子プロセスも停止するという認識は正しいでしょうか? というのも、あるシェルスクリプトを"kill -9"コマンドで強制終了させたのですが、そのシェルスクリプト内のコマンド(sleepコマンドです)は終了せずに残っていたので(psで確認しました)、??という感じでした。 さらにそのsleepコマンドの親プロセスが1(init?)になっていました。 色々とWEB上で調べてみたのですが、この動作について の記述を見つけることができませんでした。 どなたかご存知でしたら是非ご教授下さい。よろしくお願いします。

  • スレッドの停止方法の確認

    スレッドの停止方法の質問。 停止可能なスレッドを、私は以下のような形で書く事が多いのですが、インターネットで同様な コードを検索すると、2行目の停止フラグの宣言に volatile が無いものが無数に見つかります。 JSR-133 の簡単な解説を読んで、私なりに解釈した結果 volatile は必要と判断したのですが、これは間違いなのでしょうか? volatile は多少重たいので、できれば外したいのですが、 外してよい根拠が見つかりません。 真偽をご存知の方、よろしくお願い致します。 class MyThread extends Thread { private volatile boolean done = false; public void terminate(){ done = true; interrupt(); } public void run(){ while(!done){ //処理 } } }

    • ベストアンサー
    • Java
  • httpリクエストをkillするには?

    while.php while(true){ … } cronからwhile.phpを実行した場合は ps auxでプロセスをkillすればよですが ブラウザからwhile.phpにアクセスした場合は ps auxでは表示されず、いつまで経っても実行され負荷が掛かり続けます。 このような場合、cronで実行された時のように詳細を表示し、killする方法はありますでしょうか? httpdをrestartすればkillされますが、他の方法で確認・停止できるようなものがありましたらご教示頂けると幸いです。 宜しくお願いいたします。