バックグランド実行について のバックアップ(No.1)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- ソース を表示
- バックグランド実行について へ行く。
- 1 (2008-12-24 (水) 04:31:07)
- 2 (2008-12-24 (水) 04:31:48)
バックグランド実行について †
なんとなく、コマンドの後ろに&付ければ、バックグランド実行されるつもりでいました。
しかし、あるとき、バックグランドで実行されているような、されていないような状況に出くわしたわけです。
調べてみたら、こんな感じにするのが良いみたいです。
command /dev/null 2>&1 </dev/null &
リダイレクトの記述が右から左に解釈されることは別の記事[[]]で書いてますが、その通りに解釈すると、
- /dev/nullを標準出力に喰わす
- エラー出力を標準出力にマージ
- 出力を/dev/nullに喰わす
ということになります。
つまり、入力も、出力もcommandには全くないようにみせることができる、みたいです。
例えば、ですが、weblogicの起動の場合で比較すると、
# startWeblogic.sh > /dev/null &
って一般的かと思いますが、これだと起動時に出力されるjavaの実行コマンド(膨大な量のクラスパスが含まれた1行)が表示されますが、
# startWeblogic.sh /dev/null 2>&1 </dev/null &
にするとでなくなります。
また、前者だと、なんかうまくバックグランドで実行されないケースを筆者は経験したことがあるのですが、後者だとうまくバックグランドで実行されてくれます。
ナイス!
実際、この記事のきっかけになったのは、rshでweblogicをバックグランドであげたい、ってネタだったのですが、最初は
# rsh ホスト名 -l ユーザ名 /・・/startWeblogic.sh > /dev/null &
ってやってたら、全然バックグランドで実行されなくて、ほとほと困ったわけですよ。
そもそも、何でなのか理由がわからなかった。しかし、リンクのサイトを見て、
# rsh ホスト名 -l ユーザ名 /・・/startWeblogic.sh /dev/null 2>&1 </dev/null &
ってやってみたら、一発OKでした。
すばらしい。
まあ、詳しい解説はリンクのサイトに譲ることにします。