jobがStoppedになる理由と対処法

このQ&Aのポイント
  • 質問文章では、サーバーをバックグラウンドで起動しようとした際に、起動途中で停止してしまう現象が発生しています。
  • jobsコマンドで確認すると、プロセスの状態がStoppedになっていることがわかります。
  • ステータスがTになっていることから、ジョブ制御シグナルによりプロセスが停止されている可能性があります。明示的に停止していないのにStoppedになる場合は、SIGTTINというシグナルが関係している可能性があります。解決方法としては、プロセスの制御を行う必要があります。
回答を見る
  • ベストアンサー

jobがstoppedになる理由

お世話になります。 あるサーバーをバックグラウンドで起動しようとしていますが、起動途中で止まってしまいます。ログを見ると、特にエラーもなく、まさに「止まっている」感じです。 jobsで状態を見るとStoppedになっています。 bg %1 で再開しようとしても、コマンド自体は正常に終了しますが、jobsを叩くとあいかわらずStoppedのままです。 ps -lで見ると、ステータスはTになっていて、これをmanコマンドで調べると「ジョブ制御シグナルにより、もしくはトレース状態にあるため、プロセスは停止されている」と説明されていますが、正直意味が分かりません。 pflagsを取ってみると以下のようになっています。 > -bash-3.00# pflags 902 > 902: /usr/jdk/instances/jdk1.5.0/bin/java -Xmx512m -XX:NewRatio=2 -Dcom.sun > data model = _ILP32 flags = MSACCT|MSFORK > /1: flags = STOPPED > why = PR_JOBCONTROL what = SIGTTIN > sigmask = 0x00000004,0x00000000 おそらくは > /1: flags = STOPPED > why = PR_JOBCONTROL what = SIGTTIN というところがポイントだと思うのですが、正直初心者なためこの情報から次のステップを思いつけずにいます。 明示的に止めているわけでもないのに、jobがStoppedになってしまう理由というのは何が考えられるでしょうか。 私が次にするべきアクションはどういうものがあるでしょうか。 よろしくお願いいたします。

  • annyG
  • お礼率70% (67/95)

質問者が選んだベストアンサー

  • ベストアンサー
  • OKwebb
  • ベストアンサー率44% (92/208)
回答No.1

おそらくこれでしょう。 SIGTTIN - バックグラウンドプロセスが端末から読もうとした バックグラウンドのプロセスグループがユーザー入力待ちとなって停止。シェルの機能を使ってフォアグラウンドにすることで入力が可能。 バックグラウンドにするなら、入力待ちにならないようにします。

annyG
質問者

お礼

なるほど!多分それです!!! 確かにこのサーバーは、起動の後にしばらくしてからパスワードを尋ねてくるようなものだったような気がします。 ありがとうございました!!!

関連するQ&A

  • Tomcat3.2.4でのヒープの設定

    Tomcatでヒープ領域を割り当てようと思っています。 環境は、Windows2000 Server + JDK1.3.1_12です。 wrapper.propertiesで wrapper.cmd_line=$(wrapper.javabin) "-Xms256m -Xmx512m" -classpath $(wrapper.class_path) $(wrapper.startup_class) -config $(wrapper.server_xml) -home $(wrapper.tomcat_home) のように"-Xms256m -Xmx512m"と指定すれば動いたはずですが、これを指定するとnet start tomcatコマンドで起動しなくなります。 記述方法がおかしいのでしょうか。 ご存知の方教えて下さい。 宜しくお願いします。

    • ベストアンサー
    • Java
  • Vistaで、atコマンドが使えません。

    こんにちは。 Vistaで、atコマンドを使った、タスクスケジューリングができずに困っています。 例えば、管理者としてコマンドプロンプトを立ち上げ、 at 17:00 1.bat というコマンドを実行すると、 「新しいジョブをジョブ ID = 1 で追加しました。」 と表示されます。 その後、タスクスケジューラの「タスクスケジューラ ライブラリ」を見ると、 先程のジョブが、AT1という名前で、きちんと設定されています。 にもかかわらず、していした17:00になっても、1.batは実行されません。 1.batを、dirのような組み込みコマンドに変えても、実行されませんでした。 タスクスケジューリングに必要なサービスは全て起動しています。 具体的には、 DCOM Server Process Launcher Remote Procedure Call (RPC) Remote Procedure Call (RPC) Locator COM+ Event System System Service Notification Service COM+ System Application を、全て起動しています。 また、タスクスケジューラでのスケジューリングは、上手くいっています。 どうすれば、atコマンドを使う事ができるのでしょうか? 何か御存じの方がいらっしゃれば、是非、情報を提供して頂きたく思います。 では、よろしくお願い致します。

  • Java VM のヒープサイズについて

    Javaで-Xmxオプションをつけて実行する際に, -Xmx=3072m を指定すると Could not reserve enough space for object heap -Xmx=4096m を指定すると The specified size exceeds the maximum representable size. と表示されVM起動時にこけてしまいます. topコマンドでメモリ使用量を確認してみても余裕があるようです.64ビットマシンなので,確保できると考えているのです.OSで制限がかかっているのでしょうか? -Xmx=4096mで起動する方法をどうかご教授ください. ------------------------ マシンスペック ------------------------ Mac Pro OS: Mac OS X CPU: Xeon Dual-core 2.66 GHz * 2 Mem: 16GB 667MHz DDR2 FB-DIMM

    • ベストアンサー
    • Java
  • javaのコンパイラについて

    jdk-7-windows-x64.exeというjavaのコンパイラをインストールして、起動しようとダブルクリックしたのですが、「再びインストールしますか?」と出てしまいます。やはり個人情報を登録したほうがよいのでしょうか? そして、コマンドプロンプトでjavaをコンパイルしようとすると「'javac'は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチファイルとして認識されていません。」と出てしまいます。 この2つの解決方法をできるだけ詳しくお願いします。

  • tomcat5について

    tomcat5をコマンドプロンプトで起動させようとしたところ The JAVA_HOME environment variable is not defined correctly This environment variable is needed to run this program NB: JAVA_HOME should point to a JDK not a JRE とでます。 環境変数JAVA_HOMEを見てみると C:\Program Files (x86)\Java\jdk1.8.0_11; となっております。 ちなみにtomcatはDドライブにあります。 その他は、 C:\Program Files (x86)\Java\jdk1.8.0_11の中にjreフォルダがあるのですが C:\Program Files (x86)\Javaにjre8フォルダがあります(その中にはlib,binフォルダ) どこが間違っているのでしょうか?

  • linuxでjavaがうまく動きません。

    linuxでjavaがうまく動きません。 Linux初心者です。JAVAを勉強しなければならなくなりました。SUSE Linuxです。マシンは自作のようですが、先輩が作ったものなのでよく分かりません。 まず、JDKをインストールしました。すると、パソコンを起動する時に「64ビットのマシンに32ビットのソフトウェアが入っています」というようなメッセージが表示されるようになってしまいました。これはJDKのせいだと思ったので、一度削除して64ビットのJDKと書いてあるソフトをもう一度インストールしました。(しかし、したつもりでしたがこれはできていませんでした) すると、JAVAが動かなくなってしまいました。 よく調べたところ、64ビットのJDKは32ビットのJDKをインストールした上でインストールしなければいけなかったということでした。 そこで、もう一度32ビットのJDK(jdk-6u22-linux-i586.bin)をダウンロードして実行し、64ビットのJDK(jdk-6u22-linux-x64.bin)を実行しました。 それから、「.bash_profile」のファイルに PATH=$PATH:$HOME/bin:usr/local/jdk1.6.0_22/bin JAVA_HOME=/usr/local/jdk1.6.0_22 export JAVA_HOME export PATH と書き込みました。 しかし、「javac」と入力するとコマンドがないと言われます。「java -version」と入力すると「"1.5.0_20"」と表示されます。多分「"1.6.0_22"」とか表示されないといけないのかな、と思ったので、前にインストールしたものが残っているのかと探してみましたが、いろんなサイトを参照しながらインストールしたので見つかりません。(というか、インストールしたものは全部アンインストールしたつもりでした) JAVAが動くようにするにはどうしたらいいのでしょうか?

  • stoppedでも良いですか

    Did you know that Albert Einstein , the famous physicist , (had)stopped eating meal? この場合Did you knowで始まっています。 (1)stopped とhad stoppedが考えられます。   どちらが正しいでしょうか。 (2)Did you knowという言い方は有効です。    普通は、Do you knowが多いと思いますが、    使い分けがあるのでしょうか。    気分次第でしょうか。 よろしくお願いします。

  • JavaでPATH設定を修正する方法を教えて下さい

    Window7マシンにJava SE Development Kit 8(jdk-8u74-windows X64.exe)をインストールしました。 環境変数PATHの設定で、システム環境変数の中にすでに「Path」がありました。選択後の「編集」段階で最初から入力されている部分を消さないで最後のところに下記を追加すればよかったのですが、一部を消して編集してしまいました。 C:\Program Files\Java\jdk1.8.0_74\bin; これが原因してかどうか不明ですが、javacコマンドを実行してjavaソースプログラムをコンパイルすると、また「C:\>javac –version」とバージョン確認をしても、「'javac' は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。」のメッセージが表示されてしまい、コンパイルをすることもバージョン確認もできません。 因みに、javac.exe は、CドライブのProgram Files\Java\jdk1.8.0_74\bin にあり、次のようにしてバージョン確認をするとjavac 1.8.0_74と表示されて、バージョンが確認できます。 C:\Program Files\Java\jdk1.8.0_74\bin>javac –version インストールしたJava SE Development Kit 8 をアンインストールした後に、再度インストールして、PATHの設定・編集をしなおそうとしたのですが、アンインストール前に設定した PATH のままで修正はできませんでした。 次のように通常のjavacコマンドを実行してjavaソースプログラムをコンパイルするには、PATHの設定をどのようにすればよいかを教えてください。 C:\>javac Hello.java 或いは、PATHの修正ができない場合は、javaソースプログラムをコンパイルするには、どのようにすればよいかを教えてください。 尚、環境変数「JAVA_HOME」を、「変数名」を「JAVA_HOME」、「変数値」を「C:\java\jdk1.8.0_74;」として、JDKをインストールしたディレクトリに合わせて新規に設定していますが、コマンドプロンプトを起動し「set JAVA_HOME」と入力し実行したところ、JAVA_HOME=C: JAVA\ jdk1.8.0_74; と表示され、その後、「C:\>java –version」とjavaのバージョンを確認したところ、正常に確認できています。

    • ベストアンサー
    • Java
  • is stoppedとは?

    A truck is stopped at a stoplight.という文があるんですが トラックが止められているという受け身なんですか? それとも、トラックが stoppedという過去分詞で形容詞で 止まっている という状態をisという動詞で表しているんですか? そうだとすると、truck is stopping というstoppingという現在分詞も形容詞として見れば 同じ意味になりますよね? よろしくおねがいします

  • ジョブの切り離し

    クライアント(Windows)とサーバ(Unix)の通信アプリを作っています。 ソケットプログラムはクライアント側はVBで、サーバ側はCです。 データの送受信はうまくいきました。ところが、データを送信後サーバ側でデータを解析し、その結果を印刷するというしくみなのですがこの全処理が終わらないとクライアント側に送信終了のイベントが発生しません。 クライアント側がデータを送信したら、あとはサーバ側で処理をする、というふうにしたいのです。 そこでサーバ側のアプリは次のような構造になっています。 App1(ソケットアプリ) exec でApp2 を起動 App2(データの送受信) wait あり exec でApp3 を起動 App3(データ解析)              wait なし exec でApp4,App5 を起動 wait あり、sleep あり App3以降で時間がとてもかかります。wait,sleep が入っているからですが、これはデータ解析する上で必要な手順です。データの送受信はApp2までで終わっているので、App3のプロセスを発行したらソケット切断にしたいのですが、App3が全て終わるまで待ってしまいます。 起動のさせ方でなんとかならないものかと思うのですが、どうぞアドバイスを宜しくお願いいたします。