68user's page 掲示板

Prev< No. 3048〜3051> Next  [最新発言に戻る] [過去ログ一覧]
No. 3048 # HITO 2003/01/20 (月) 17:08:11
シェル実行中にCtrl+Cして、強制終了させたときに、
バックグラウンドで動いていたシェルも終了させたいんですが、
イマイチうまく動きません。ちなみにKシェルです。

back_pid=`job -l awk '{print $3}'`でPIDを取得して
kill -9 $back_pidで強制終了
というのを、trap '〜' INTの中でやろうと思ったんですが、
trapの''の中にawkの''があるせいで、エラーになってしまいます。

でも、これだと、バックグラウンドで動いてるプロセスが無い場合も、
未設定の値でkillが走ってしまうので、あまり良くないですが・・・

何か良い方法はありませんか?

No. 3049 # 68user 2003/01/21 (火) 10:51:01
>>3045 has
> Win2k上でnslookupがうまくいってないようなので、ついでにそちらも
> 監視してみたところ、Non-Existent Domainが返されていました。
謎ですねぇ。こっちを解決したら Linux の問題も解決したりして。

>>3047 KEI
Windows はわかりません。

>>3048 HITO
> trapの''の中にawkの''があるせいで、エラーになってしまいます。
クォートの規則がわからなかったら、
        siginthandler(){
                  back_pid=....
                  kill ...
        }
        trap siginthandler INT
と別関数にしましょう。

> でも、これだと、バックグラウンドで動いてるプロセスが無い場合も、
> 未設定の値でkillが走ってしまうので、あまり良くないですが・・・
        if [ "$back_pid" != "" ]; then
                kill ...
        fi
てな感じで。

No. 3050 # さとし 2003/01/21 (火) 15:18:01
はじめまして、さとしです。
突然で申し訳ないのですが教えて欲しい事があります
shell内で、あたかも関数の様に処理を作成して、同一shell内の呼び出し元に返り値を返すことって出来ますか?

No. 3051 # 68user 2003/01/21 (火) 16:44:30
>>3050 さとし
shell って言ってもいくつか種類があるんですけんども。どのシェルを使って
いるのか ちゃんと書きましょう。

sh 系なら
        func(){
                echo "$@"
                return 8
        }
        func 1 2 3 4 hoge fuga
        echo $?
とか。

Prev< No. 3048〜3051> Next  [最新発言に戻る] [過去ログ一覧]