フォアグラウンドで実行中のプロセスをバックグラウンドに変更して SSH が切れても終了しないようにする
2018/02/25 12:35
  • タイトル長くなりましたが、実行時間の見積もりを誤って想定よりも時間がかかってしまって
    bg コマンドや disown コマンドを駆使してscreen コマンドど同じようなことを行う方法についてのまとめです。
    いや、 screen コマンド入れておけば一撃なんですけどね。コマンドがインストールされていないような環境において他のコマンドで代用しました、というお話です。

    フォアグラウンドでコマンドを実行する

    まずは普通にコマンドを実行する

    # サンプルのため sleep コマンドを実行
    $ sleep 1000000
    

    ジョブを一時停止してバックグラウンドに切り替える


    Ctrl + z でジョブを一時停止
    $ sleep 1000000
    ^Z
    [1]+  Stopped                 sleep 1000000
    

    一時停止したジョブをバックグラウンドで実行する
    $ bg %1
    [1]+ sleep 1000000 &
    

    JOB を確認

    $ jobs
    [1]+  Running                 sleep 1000000 &
    

    ↑バックグラウンドで実行されています。

    しかしこのままでは SSH 接続が切れたらジョブが終了してしまいますので、
    切れても実行され続けるようにします。

    disown コマンドで実行中のジョブを削除する

    このコマンドを使えば、シェルを終了させても実行を終了させたくないジョブのプロセスを残すことが出来ます。(つまり最後まで実行される)
    $ disown %1
    # 標準出力なし
    

    JOB を確認
    $ jobs
    # 標準出力なし(ジョブなし)
    

    これでジョブから削除されました。この状況でもプロセスは生きているため実行されたままです。

    プロセスを確認

    $ ps aux|grep sleep
    wkmetty         1061   0.0  0.0  4267752    680 s000  R+   12:18PM   0:00.00 grep sleep
    wkmetty         1018   0.0  0.0  4267736    660 s000  S    12:16PM   0:00.00 sleep 1000000
    

    参考サイト


    【 disown 】コマンド――シェルのジョブテーブルからジョブを削除する
    実行中のコマンドをバックグランドに切り替える

    人気ブログランキングへ ブログランキング・にほんブログ村へ
    ↑応援よろしくお願いします!m(_ _)m

  • 2018/02/25 12:35
  • サーバー
  • screenbgdisownjobsコマンドLinuxプロセスバックグラウンドフォアグラウンドSSHターミナル
  • 新しい記事へ
    【写真日記】天気が良かったのでお散歩がてらお花見をしてきました

    古い記事へ
    [mac] ls コマンドの出力結果をカラー表示に変更する

profile picture

自己紹介的な何か

@wkmettyでついったーやってます。時々。 6年間勤めたゲーム会社を2018年2月に退職しフリーランスのプログラマに。 WordPress Core, WP-CLI コントリビューター。 お仕事募集中です。