質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

UNIX

UNIXとは、AT&Tのベル研究所で開発されたコンピューター用のマルチユーザー・マルチタスクのオペレーションシステム(OS)です。政府や教育機関や研究所で広範囲に採用されています。

Q&A

解決済

3回答

8583閲覧

Linuxのジョブについての質問,psとjobsの違い

spectrum

総合スコア44

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

UNIX

UNIXとは、AT&Tのベル研究所で開発されたコンピューター用のマルチユーザー・マルチタスクのオペレーションシステム(OS)です。政府や教育機関や研究所で広範囲に採用されています。

1グッド

2クリップ

投稿2016/02/13 04:04

編集2016/02/13 04:07

昨日帰る時に行ったlinuxでのバックグラウンドジョブが今どういう状況になっているのか教えて下さい.
また,止まっているなら再開したいし,フォアグラウンドに持って行きたいです.

昨日
$ xxx &
として,あるソフトを実行してログアウトして帰りました.
今日来てpsと打ったら
$ ps
PID TT STAT TIME COMMAND
aaa 2 S bbb xxx
とでてきました.(aaa,bbb,xxxは適当)
次にfgと打ったらエラーが出ました.
その次にpsで調べたところコマンドxxxのSTATがRに変わっていました.
ところが
$ jobs
と打っても何も出てきません.

psではSTATがRなのにjobsでは何も出てこないのがよく分かりません.

このジョブxxxはどうなっていますか?教えて下さいよろしく
お願い致します.

Squidward👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

ジョブは、制御端末と結びついています。fg bg jobs と言ったジョブコントロールコマンドは、そのジョブの制御端末からしか実行できません。
なので、いったんログアウトしてしまったら、その端末で動いていたジョブについてはジョブ制御不可能になります。

killであれば、ジョブじゃなくてプロセスが対象なので、異なる端末からでも実行できます。

「プロセスとは何か」については説明しやすいのですが、「ジョブとは何か」については説明が難しいです。
関連キーワード:
プロセスグループ、プロセスリーダー、セッション、セッションリーダー

補足:
端末を切っても、もとの制御端末のままで作業を続行したい場合は、他の方の書いているように擬似端末ソフト(screen や tmux)を使います。そうすると再接続で同じ制御端末を使い続けられます。インターネットの向こうのサーバーにログインするときには必須ですね。
ログアウトしちゃダメですよ。ログアウトせず端末ソフトをいきなり終了させるか、ネットを切って下さい。

投稿2016/02/13 04:28

編集2016/02/13 06:34
otn

総合スコア84499

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ps で一覧されるのはプロセス、というのはよろしいですね。プロセスには親子関係があるというのも大丈夫でしょうか。たとえば pstree コマンドを使うと、親子関係がツリー上に表示されます。

ログインしてコマンドを打てる状態だと、何かしらの対話シェルが起動している状態です。bash とか。ジョブというのはその対話シェルにおいて、複数の処理(プロセスグループ)を扱うときの概念です。ですので、その対話シェルが終了すれば、そのシェル内で起動したジョブは終了します。ログアウトするということは、その際に使っていた対話シェルが終了するので、ログイン中に作ったジョブは死にます。

もし、ログアウト後もずっとジョブを実行させておきたい、という場合には、screen や tmux といったツールを使うとよいと思います。screen や tmux の機能はそれだけではないし、正確な説明ではないですがざっくり言いますと、対話シェルを起動する土台となるプロセスと、その土台プロセスに接続して操作する仮想端末になるプロセスとで構成されます。screen と実行すると、土台となるプロセスと端末プロセスが作られます。screen の中で複数の対話シェルを起動し、それを端末プロセスの中で切り替えて使うことができます。で、端末プロセスの側で土台プロセスとの接続を切ったり、またつないだりということもできます。
話を整理します。screen を実行し、そこの対話シェルで xxx とコマンドを打ってジョブを起動します。その後、screen をデタッチします(土台の screen との接続を切ります)。土台の screen は動き続け、その上の対話シェルも xxx コマンドもジョブも動き続けたままです。screen -ls とすると土台の上で動いている対話シェルのリストを見ることができます。この後、ログアウトしても土台は動き続けます。翌日とかに新たにログインし、screen -r とすると、デタッチしていた対話シェルに再び接続することができます。
ちょっとわかりにくい説明で済みません。

--- 追記

terminal

1[takeyuki@localhost ~]$ screen 2【この下から新しいウィンドウ】 3[takeyuki@localhost ~]$ while sleep 1; do echo -n .; done 4.... 5【適当なところで Ctrl+a d でデタッチ】 6[takeyuki@localhost ~]$ screen -ls 7There is a screen on: 8 9538.pts-0.localhost (Detached) 91 Socket in /var/run/screen/S-takeyuki. 10 11[takeyuki@localhost ~]$ screen -r 12【さっきの続きに戻る】 13[takeyuki@localhost ~]$ while sleep 1; do echo -n .; done 14.................................................................................................................................................................................................................................................................................

投稿2016/02/13 05:45

編集2016/02/13 06:01
unau

総合スコア2468

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

お二人ともとても参考になりました。ありがとうございました。

投稿2016/02/13 12:11

spectrum

総合スコア44

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問