Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

SSHが切れても実行中のプロセスを生かし続ける(nohup コマンド)

More than 1 year has passed since last update.

SSHして外部からラズパイ内部でたたいたコマンドは実行中にSSHが切断されると終了する

SSHしているラズパイで,時間のかかるプロセスをSSHもと(PCのTeraTermのコンソールとか)から実行中にSSHが切れてしまうと,ラズパイがローカルだけで実行できるプログラムであっても実行していたプロセスが終了してしまう.
* 例:ラズパイのローカルのみで完結する,1時間回し続けるプログラムをSSHで実行していたが,ネットワークが不安定だったため,実行中にSSHが途絶えた.途絶えた時点でラズパイの中のプロセスも終了した

でも実験のデータは確実にとりたいのでネットワークが切れてもラズパイ内部ではプログラムを実行し続けてほしい

sshが何らかの理由で途絶えたとしてもラズパイ側で動いているプロセスを生きてほしい.

そんな時は nohup コマンドを使う.
* 記号なしリストnohupコマンドは実行したいコマンドの前につけることでその実行によって動くプロセスはSSHもとのアクションを受け付けなくなる(SSHが切れても終了しなくなる)
* 当然Ctrl+Cなどでの強制終了も効かなくなるため,killコマンドでプロセスを直接殺す必要がある
* 標準出力もキャンセルされてしまうため,実行中のプログラムの動作状況は確認しづらい
* 例えば,nohup lsと実行しても何も表示されない
* 実行中はそのコンソールには何も出力されないのでコマンドは末尾に&を付けてバックグラウンドで実行することを強くお勧めする
* 標準出力はnohup.outというファイルの中に書き込まれている
* プログラムの実行中はtail nohup.outなどを実行して出力状況を確認することができる

例:$ nohup python3 hogehoge.py &

プログラムを停止させるときはps -xコマンドでプロセスを確認

$ ps -x

  PID TTY      STAT   TIME COMMAND
  508 ?        Ss     0:00 /lib/systemd/systemd --user
  511 ?        S      0:00 (sd-pam)
  516 ?        Ssl    0:16 /usr/bin/lxsession -s LXDE-pi -e LXDE
  525 ?        Ss     0:00 /usr/bin/dbus-daemon --session --address=systemd: --nofork --nopidfile --systemd-activation
  566 ?        Ss     0:04 /usr/bin/ssh-agent x-session-manager
  573 ?        Ssl    0:00 /usr/lib/gvfs/gvfsd
  578 ?        Sl     0:00 /usr/lib/gvfs/gvfsd-fuse /run/user/1000/gvfs -f -o big_writes
  588 ?        S      0:01 openbox --config-file /home/pi/.config/openbox/lxde-pi-rc.xml
  591 ?        Sl     0:00 lxpolkit
  599 ?        Sl    62:18 lxpanel --profile LXDE-pi
  601 ?        Sl     0:03 pcmanfm --desktop --profile LXDE-pi
  629 ?        Ss     0:00 /usr/bin/ssh-agent -s
  658 ?        S      0:07 /usr/bin/vncserverui service 15
  672 ?        S      0:01 /usr/bin/vncserverui -statusicon 7
  675 ?        Ssl    0:00 /usr/lib/menu-cache/menu-cached /run/user/1000/menu-cached-:0
  683 ?        Z      0:00 [sh] <defunct>
  691 ?        Ssl    0:00 /usr/lib/gvfs/gvfs-udisks2-volume-monitor
  701 ?        Ssl    0:00 /usr/lib/gvfs/gvfs-mtp-volume-monitor
  705 ?        Ssl    0:00 /usr/lib/gvfs/gvfs-gphoto2-volume-monitor
  709 ?        Ssl    0:00 /usr/lib/gvfs/gvfs-goa-volume-monitor
  713 ?        Ssl    0:00 /usr/lib/gvfs/gvfs-afc-volume-monitor
  751 ?        Sl     0:00 /usr/lib/gvfs/gvfsd-trash --spawner :1.4 /org/gtk/gvfs/exec_spaw/0
 1300 ?        S      0:14 sshd: pi@pts/0
 1303 pts/0    Ss     0:00 -bash
 1834 ?        S      0:00 sshd: pi@pts/2
 1837 pts/2    Ss     0:00 -bash
 1952 pts/0    R+     0:30 python3 hogehoge.py  //該当のプロセス
 1953 pts/2    R+     0:00 ps -x
17807 ?        Sl     0:24 lxterminal
17808 ?        S      0:00 gnome-pty-helper
17809 pts/1    Ss+    0:00 bash
24536 ?        S      0:02 sshd: pi@notty
24538 ?        Ss     0:00 /usr/lib/openssh/sftp-server

該当のプロセスのプロセスID(PID)を指定してプロセスを削除する

kill 1952
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away