• 締切済み

実行中のコマンドを、ログアウト後もバックグラウンドで実行させる方法(ksh)

ksh環境において、実行中のコマンドをログアウトしてもそのまま実行させる方法を教えてください。 ctrl+zでサスペンドにし、jobsでjob番号を確認してbg %<job番号>でバックグラウンドにするのはできましたが、exitでログアウトしターミナルを抜けるとjobが無くなってしまいます。 bashならdisownというコマンドがあるそうなのでdisown %<job番号>でいけるのではないかと思うのですが、kshではdisownに相当するようなものがあるのでしょうか? コマンド実行前なら『nohup <コマンド> &』でできるのは確認済みです。

みんなの回答

回答No.2

ksh(pdksh)にはdisownコマンドはありませんが、setコマンドでシェルオプションのnohupをonにすればできます。 $ set -o nohup   nohupオプションをonへ - ログアウトしてもバックグラウンドジョブは継続 $ set +o nohup   nohupオプションをoffへ - ログアウトするとバックグラウンドは終了 $ set -o   オプション一覧表示 標準ではnohupオプションはonなので、どこかの環境設定でoffにされてるかもしれませんね。

  • spieder
  • ベストアンサー率59% (13/22)
回答No.1

普通にscreenを使ったらいいのでは?

参考URL:
http://www.dekaino.net/screen/04example.html
polygonZ
質問者

お礼

業務でscreenの導入が許されていないので、kshではあきらめました・・・ screenの存在を始めて知ったので機会があれば使ってみたいと思います。 また、半年も前に回答をいただいたにも関わらず大変申し訳ありませんでした。 以後気をつけます。 ありがとうございました。

関連するQ&A

  • ログアウト後のコマンド処理継続について

    コマンドを実行してログアウト後も処理継続させる方法をgoogle先生に聞くと nohupでコマンド実行、とでてきます。 しかし試していると、nohupでなく $ command & と、bg実行でもログアウト後に処理継続できているようでした。 ログアウト後処理継続は、bg実行でもよいのでしょうか? またnohupとの違いはなんでしょうか ご教授ください。 お願いします。

  • バックグランド実行+ログアウトでジョブが残るのは?

    以下のようなシェルをバックグランド実行した後、ログアウトしてもジョブ(プロセス)が残っているのはなぜなのでしょうか? バックグランド実行しても、ログアウトするとバックグランドプロセスはkillされてしまう。だからnohupを使いましょう、、とネットではよく書かれています。自分でこれを検証試みた結果、想定の 動きとならなかったので質問させてもらいました。 以下シェルを 「 ./test01.sh & 」と実行させるのですが、別コンソールでプロセスを監視している限り、最後まで動作し続けるのです。 どなたかおわかりになる方教えてください。 ◇検証用シェル #!/bin/sh echo "start" > ./test01.log for ((i=0 ; i<3 ; i++)); do sleep 60 echo $i >> ./test01.log date >> ./test01.log done

  • シェルスクリプトを途中からバックグラウンドで動かす方法

    フォアグラウンドで起動したシェルスクリプトを、途中から 自動的に バックグラウンドに移行させる方法はないでしょうか。 ユーザーが操作するのなら、もちろん フォアグラウンドで起動→Ctrl Z で中断→jobsでジョブ番号を確認→bg %[ジョブ番号] という手順でできることは知っていますが、 シェルスクリプトが特定の段階まで処理したら自動的に バックグラウンドに移行するようにしたいのです。 たとえば、 #!/bin/sh echo "パラメータを入力してください" read param echo "ここからバックグランドに移行します" #(*) # ここからバックグラウンドに移行して # 処理を行う (バックグランドでやりたい処理) # exit という感じで、処理に必要なパラメーターをターミナルから入力 したいので、最初はフォアグラウンドで起動する必要がありますが、 入力が終わったらあとは邪魔なのでバックグラウンドに回したいのです。 それなら起動時の引数としてパラメーターを与えればいい、と言われ そうですが、パラメーターの数が不定の場合も考えているので、 ターミナル入力が必要なのです。 (*)の部分に jobs; bg %1 などと入れてみましたが line 17: bg: no job control と怒られるだけで、バッググラウンドにはなりませんでした。 指定したPIDのプロセスをバックグラウンドにするような コマンドでもあればうまくいきそうですが、そういう コマンドはないようで、手詰まり状態です。 何かうまい方法がありましたらご教示下さい。 なお、baシェルやCシェルではなく、一番基本的な Bourne Shell で使えるような方法をお願いします。 また、できるだけディストリビューションや OS(Linux、BSD、Solarisなど)の違いにも依存しない 方法をお願いしたいと思います。

  • RHEL:rootのログアウト

    RHELでログアウトをする際に、 現在はGUIで 「システム」 > 「rootのログアウト」をクリックしてログアウトをし、 ログイン画面に戻っています。 rootからログアウトをして、ログイン画面に戻る動作を コマンドでしたいのですが、コマンドを教えてください。 [logout]コマンドを行うと「bash: logout: not login shell: use 'exit'」と出力されます。 [exit]コマンドを行うと、コマンドを打つターミナルを閉じるだけです。

  • powershellをバックグラウンド実行

    いつもお世話になっております。 とあるpowershellをバックグラウンド実行したいのですが、うまくいきません。 【実施したいこと】 background.ps1をバックグラウンド実行したい。 【前提条件】 background.ps1はbackground.batファイルより実行する想定で考えている。 background.batの中身(イメージ) (中略) powershel l-command "background.ps1" (中略) get-executionpolicyではremotesignedで~ps1ファイルは実行許可を与えている。 【確認していること】 1.start-jobコマンドを使用すればバックグラウンド実行ができることを確認済み 2.batの実行を以下にするも実行がうまくいかない。 powershell -executionpolicy remotesigned -command "start-job background.ps1" 3.間にpowershellをバックグラウンドするbackground_middle.ps1をかませてもうまくいかない。 batのコマンド実行をbackground_middle.ps1にし、background_middle.ps1を start-job backgroundと記載しており実行してもうまくいかない。 4.powershell上でstart-job background.ps1を手動で実施するとうまく実行される。 申し訳ございませんが、大変困っており、すぐ回答を頂きたいです

  • ◆CentOS nohupコマンドが実行できない・・◆

    環境 CentOS5 Linux初心者です。どうか教えてください。 hoge.shというbashを作成して、パーミッション777を与え、 root権限で nohup コマンドを実行した際に、以下のようなエラーが出力されてしまいます。nohup.out 原因がわからないので、ファイルにもパーミッション 777を与えたり、shファイル自体のパーミッションも確認しているのですが、やはりエラーになってしまいます。 原因がわかる方ご教授ください。 ◆実行コマンド root>#nohup ./hoge.sh & nohup: appending output to `nohup.out' nohup: cannot run command `./hoge.sh': 許可がありません

  • コマンド実行時に"&"を付けて実行するとバックグラウンドジョブで実行さ

    コマンド実行時に"&"を付けて実行するとバックグラウンドジョブで実行されますが、"&"が付けられてコマンドが実行されたかを判別する方法はありますでしょうか。 @ARGVでは特殊文字は引数として取得できないようでした。"&"も含めてコマンドラインの引数を取得することは可能かお教え下さい。

    • ベストアンサー
    • Perl
  • rshを使うスクリプトをバックグラウンド実行

    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コマンドでフォアグラウンドで再開させると、最後まで問題なく実行されます。 フォアグラウンドで実行すればうまくいくのに、バックグラウンドで実行すると止まってしまうのが理解出来ません。 これは何が原因なのでしょうか。 そして、どうしたら解決出来るのか。 どなたかご存知でしたら、ご教示頂きたくお願い致します。

    • ベストアンサー
    • Perl
  • atコマンドで実行予定の内容を知りたい

    atコマンドで実行予定の内容を確認するにはどうしたらよいでしょうか。 atqではジョブ番号しかわかりません。 ジョブ番号の内容がわかればよいのでしょうが、その方法がわかりません。 2010年1月17日

  • シェル(sh)で実行コマンドを標準出力するには

    kshでコマンドを実行して結果をファイルにリダイレクトしています。 結果のみファイルに出力され、実行したコマンドを確認することができません。 実行コマンドも一緒にファイルに出力する方法がありましたら教えてください。 なお、実行コマンドをechoするってのはなしで。 多量のコマンドを実行する場合にめんどくさいので。