
Linux+Perlでのお話です。
内部でsystem関数を使ってrshコマンドを実行しているperlスクリプト(以下、スクリプトAという)があります。
スクリプトAをフォアグラウンドで実行するとうまく流れるのですが、バックグラウンド実行すると、rshコマンドを実行した直後でjobが止まってしまいます。
もっと詳しく言いますと、スクリプトAのrshコマンドは、ディスクを共有しているリモートマシンに対して、スクリプトBを実行するように指示しています。
スクリプトBではとある計算を行なっており、その計算結果をファイルに出力しています。
そして、その結果をスクリプトAで読み込んで後処理を行うというものです。
-----
…(前処理)…
system("rsh (ホスト名) \"(スクリプトB実行コマンド及び引数) 1> /dev/null 2> /dev/null\"");
# ここでjobが止まってしまいます。
# ここで標準出力(ログファイルにリダイレクトしてる)に何か出力しようとしても、何も出力されてません。
(スクリプトBの結果ファイルの読み込み)
…(後処理)…
-----
Jobが止まってしまうと言っているのは、jobsコマンドで見ると"job stopped"となっている状態のことを言っています。
この状態でスクリプトBの結果はファイルに出力されているので、rshのコマンドはうまく投げられていると思います。
(「rshやsshは標準入力が期待されてるとバックグラウンド実行が出来ない」(?)というような記述をどこかで見かけたので、念のためrshに"< /dev/null"の記述を加えてもみたのですが、変わりませんでした)
その後、止まっているjobをfgコマンドでフォアグラウンドで再開させると、最後まで問題なく実行されます。
フォアグラウンドで実行すればうまくいくのに、バックグラウンドで実行すると止まってしまうのが理解出来ません。
これは何が原因なのでしょうか。
そして、どうしたら解決出来るのか。
どなたかご存知でしたら、ご教示頂きたくお願い致します。
No.2ベストアンサー
- 回答日時:
n オプションをけると上手くいくかも
http://linuxjm.sourceforge.jp/html/netkit/man1/r …
csh(1) を使用している場合に、 rsh の入力を端末にリダイレクトしたままバックグラウンドで動作させると、リモートコマンドから入力がない場合でも rsh は動作をブロックする。入力が必要ない場合は、 -n オプションを用いて rsh の入力を /dev/null にリダイレクトするべきである。
ご回答ありがとうございます。
まさに、ご指摘頂いたとおりの内容だったようで、rshに-nオプションを加えることで、途中でスクリプトが停止することなくバックグラウンドで実行することが出来ました。
やはり「rshやsshは標準入力が期待されてるとバックグラウンド実行が出来ない」ということだったのですね…
rshで実行させたスクリプトの結果がファイルに書き出されていたので、てっきり問題ないものだと思い込んでました。
非常に助かりました。ありがとうございました。
今後とも宜しくお願い致します。
No.1
- 回答日時:
rsh先に ~/.bashrcや~/.cshrcなどのシェル起動時に自動実行されるファイルがあって、
その中に sttyコマンドやxmodemapなどの端末依存するコマンドが書いてあると、
そこで処理待ちになってしまった経験があります。
私は、.chsrcで
if ( $?term ) then
stty ~
endif
として回避しました。
(.bashrcはまた別の書き方)
ご回答ありがとうございます。
今回は、rshに-nオプションをつけることで、途中で止まることなくバックグラウンドで実行されました。
今回はご指摘頂いた事象に該当するものではなかったみたいですが、今後の参考にさせて頂きます。
今後とも宜しくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ADサーバにおけるログインID,PC...
-
Cからシェルを起動し返り値をハ...
-
VBSを利用して、IEのタブを自動...
-
cygwinでcshが認識されず困って...
-
VBSで自動ログインについて
-
Perlのライセンス
-
awkの処理速度を改善したい
-
例外処理のフローチャートの記...
-
「デバイスは PRN を初期化でき...
-
ユーザー定義関数に#NAME?が返...
-
vba userFormのSubを標準モジュ...
-
Excel VBA 定義されたプロージ...
-
Excel VBAでリンク切れをチェッ...
-
VBAで別モジュールへの変数の受...
-
PerlのWeb::Scraperと正規表現...
-
Excel VBAで、ユーザーフォーム...
-
Excel VBAで、ユーザーフォー...
-
Pg.pmモジュールがロードできない
-
python 環境構築について
-
シャープ製品JH-WB1821 と BCG...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
vbs: オブジェクトがコレクショ...
-
Perlのライセンス
-
Cからシェルを起動し返り値をハ...
-
cygwinでcshが認識されず困って...
-
パスワードの保存
-
powershellで関数名を変更する...
-
dieによる終了コード(ステータ...
-
perl初心者 「カウンタ」
-
月刊LinuxWorldのめっちゃ便利...
-
ptkdbを使ってCGIプログラムを...
-
UWSCのスクリプトにラグが発生...
-
VBScriptでCurrentDirectoryを...
-
ADサーバにおけるログインID,PC...
-
CGI、このベンチマークは重い?...
-
プログラム初心者です。unix上...
-
perlに特化したエディタご存じ...
-
ちょっとした疑問です
-
Mac OSX 10.6を使っています。
-
頭にperlとつけないと実行できない
-
VBScriptの文字化けについてご質問
おすすめ情報