バックグランド実行について
Last-modified: 2013-08-24 (土) 02:14:21 (3870d)
Top / バックグランド実行について
バックグランド実行について †
なんとなく、コマンドの後ろに&付ければ、バックグランド実行されるつもりでいました。
しかし、あるとき、バックグランドで実行されているような、されていないような状況に出くわしたわけです。
調べてみたら、こんな感じにするのが良いみたいです。
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でした。
すばらしい。
まあ、詳しい解説はリンクのサイトに譲ることにします。