
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を探す
今、見られている記事はコレ!
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
UWSCのスクリプトにラグが発生...
-
Perlのライセンス
-
エクセルVBAでシートモジュール...
-
perl 正規表現でエラー
-
パワーポイントでマクロ(Auto_C...
-
モジュールからフォームのボタ...
-
初心者です。Perlではどんな時...
-
Excel VBAから利用できるフリー...
-
XSUB.h、EXTERN.h、perl.h につ...
-
「デバイスは PRN を初期化でき...
-
Form間の値の渡し方
-
PerlのWeb::Scraperと正規表現...
-
pp (Perl Packager) で require...
-
C言語について。
-
VBでグローバル変数を宣言するには
-
AddressOf と同じ機能を持った...
-
Perl メール 文字化け
-
ランダムな単語を得るAPIってあ...
-
グラフのX,Y座標を取得したい
-
教えて下さい。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
vbs: オブジェクトがコレクショ...
-
Perlのライセンス
-
cygwinでcshが認識されず困って...
-
Cからシェルを起動し返り値をハ...
-
パスワードの保存
-
powershellで関数名を変更する...
-
perl初心者 「カウンタ」
-
dieによる終了コード(ステータ...
-
ptkdbを使ってCGIプログラムを...
-
UWSCのスクリプトにラグが発生...
-
月刊LinuxWorldのめっちゃ便利...
-
VBScriptでCurrentDirectoryを...
-
ADサーバにおけるログインID,PC...
-
CGI、このベンチマークは重い?...
-
perlに特化したエディタご存じ...
-
プログラム初心者です。unix上...
-
myになっている理由
-
ちょっとした疑問です
-
パーミッション600でもブラウザ...
-
Mac OSX 10.6を使っています。
おすすめ情報