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程序时,print无法输出 :

    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 &

posted @ 2017-05-09 21:38  a梦想去柬埔寨  阅读(180)  评论(0编辑  收藏  举报