トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS

バックグランド実行について のバックアップ(No.1)


バックグランド実行について

なんとなく、コマンドの後ろに&付ければ、バックグランド実行されるつもりでいました。

しかし、あるとき、バックグランドで実行されているような、されていないような状況に出くわしたわけです。

調べてみたら、こんな感じにするのが良いみたいです。

command /dev/null 2>&1 </dev/null &

リダイレクトの記述が右から左に解釈されることは別の記事[[]]で書いてますが、その通りに解釈すると、

  1. /dev/nullを標準出力に喰わす
  2. エラー出力を標準出力にマージ
  3. 出力を/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でした。

すばらしい。

まあ、詳しい解説はリンクのサイトに譲ることにします。

リンク