Linux 技巧:让进程在后台可靠运行的几种方法
https://www.ibm.com/developerworks/cn/linux/l-cn-nohup/
用 telnet/ssh 登录了远程的 Linux 服务器,运行了一些耗时较长的任务,让命令提交后不受本地关闭终端窗口/网络断开连接的干扰。
nohup/setsid/&
- nohup 能让提交的命令忽略 hangup 信号。(用户注销(logout)或者网络断开时,终端会收到 HUP(hangup)信号从而关闭其所有子进程)
方式:在要处理的命令前加上 nohup,标准输出和标准错误缺省会被重定向到 nohup.out 文件中。
- setsid 改变我们的进程的父进程,使它的父 ID(PPID)为1(即为 init 进程 ID),而不是当前终端的进程 ID。
方式:在要处理的命令前加上 setsid。
- 将"&"也放入“()”内。(将一个或多个命名放在“()”中就能让这些命令在子 shell 中运行中)(原理:新提交的进程的父 ID(PPID)为1(init 进程的 PID))
方式:(ping www.ibm.com &)
tips:
(1) CTRL+Z 停止进程并放入后台
(2) jobs 显示当前进程
(3) bg %N 使第N个任务在后台运行(%前有空格) 一般:bg %1
(4) fg %N 使第N个任务在前台运行
默认bg,fg不带%N时表示对最后一个进程操作!
ps -ef |grep 输出的具体含义 :http://blog.csdn.net/sinat_24928447/article/details/49869199
nohup python test.py > nohup.out 2>&1 &
发现nohup.out中显示不出来python程序中print的东西。这是因为python的输出有缓冲,导致nohup.out并不能够马上看到输出。
python 有个-u参数,使得python不启用缓冲。
nohup python -u test.py > nohup.out 2>&1 &