Linux 下在后台运行进程

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kikajack/article/details/84189485

参考:
Linux 技巧:让进程在后台可靠运行的几种方法

ssh 登录了远程服务器时,如果在前台运行耗时较长的任务, 当 ssh 掉线或关闭窗口时会导致命令停止运行。

hup 与 nohup

当用户注销(logout)或者网络断开时,终端会收到 HUP(hangup)信号从而关闭其所有子进程。有两种解决办法

  • 让进程忽略 HUP 信号
  • 让进程运行在新的会话里,从而成为不属于此终端的子进程

nohup

nohup 的用途是让提交的命令忽略 hangup 信号。使用时只需在要处理的命令前加上 nohup 即可,标准输出和标准错误缺省会被重定向到 nohup.out 文件中。一般我们可在结尾加上 & 来将命令同时放入后台运行,也可用 >filename 2>&1 来更改缺省的重定向文件名。

setsid

setsid 命令可以切换进程所属的终端。setsid 的使用也是非常方便的,也只需在要处理的命令前加上 setsid 即可。

NAME
       setsid - run a program in a new session

SYNOPSIS
       setsid program [arg...]

DESCRIPTION
       setsid runs a program in a new session.

OPTIONS
       -c, --ctty
              Set the controlling terminal to the current one.

关于 subshell

将一个或多个命名包含在“()”中就能让这些命令在 subshell 中运行中。此时新提交的进程的父 ID(PPID)为1(init 进程的 PID),并不是当前终端的进程 ID。

将"&"也放入“()”内之后,所提交的作业并不在作业列表中,无法通过 jobs 来查看,但可以通过 ps -ef 命令查看。

disown

对于已经提交的命令,如果事先没有使用 nohup 或者 setsid 来避免 HUP 信号,可以通过作业调度(运行命令时结尾加 & 或者运行命令后使用 Ctrl + z)配合 disown 命令(这个命令只能用于作业)来补救。

  • 用disown -h jobspec来使某个作业忽略HUP信号。
  • 用disown -ah 来使所有的作业都忽略HUP信号。
  • 用disown -rh 来使正在运行的作业忽略HUP信号。

Ctrl + z

  • Ctrl + z 会将当前进程挂起到后台暂停运行。挂起后可用 jobs 命令查看其作业号
  • fg 可以将挂起的进程重新放回前台继续运行
  • bg 来将挂起的进程放在后台

这样就可以在一个终端内灵活切换运行多个任务。

tmux

tmux 是 Linux 下常用的分屏工具,可以在一个终端中实现多个窗口,每个窗口又可以实现多个 pane 划分。完整资料可以参考 这里

猜你喜欢

转载自blog.csdn.net/kikajack/article/details/84189485