> 文档中心 > 【Linux】【操作】Linux操作集锦系列之三——进程管理系列之(五)进程与控制终端(shell)去绑定(解耦)的操作

【Linux】【操作】Linux操作集锦系列之三——进程管理系列之(五)进程与控制终端(shell)去绑定(解耦)的操作


  • 本系列文章,将整理一系列Linux环境下进程相关的操作命令,包括进程启动、kill、挂起、查看、前后台进程切换等各种命令。
  • 本文为本系列的第五篇,进程的剥离,关注如何将某个shell下启动的进程与该shell(终端)去绑定,也即关闭该shell或终端后,如何让该进程继续执行而不受影响或者暂时挂起后续继续之前的操作。
  • 欢迎各位关注我的博客:https://qxhgd.blog.csdn.net。

screen

  • GNU Screen 会运行一个守护程序,所以即使你关闭了用来启动它的终端,你的 shell 仍然可用。你可以从不同的计算机上连接并共享屏幕。它可以将你的终端屏幕分割成水平或垂直的窗格。
  • 值得一提的是,Screen还可以用共享你的屏幕;
  • 因为screen是“元老级”的GNU计划项目,所以不管是apt软件源、或者是yum软件源等其他软件源,都存在screen,只需要使用软件源安装命令即可,以Red Hat为例:
[qxhgd@localhost ~]$ yum install screen
  • 一般的操作步骤:

– 1、启动一个screen:

 [qxhgd@localhost ~]$ screen  #启动一个无名screen [qxhgd@localhost ~]$ screen -S make #启动一个命名为make的screen

– 2、在该screen进行某些操作,如make;
[qxhgd@localhost ~]$ make#启动一个无名screen

– 3、退出该screen

按Ctrl-A和d,退出该screen(之后screen的会话仍将是活跃的);

– 4、查看当前的screen

[qxhgd@localhost ~]$ screen -lsThere are screens on: 4149.pts-0.localhost    (Attached) 4087.tar (Detached) 4022.make(Attached) 3764.make(Attached) 3606.top (Attached) 3504.pts-0.localhost    (Detached)6 Sockets in /var/run/screen/S-qxhgd.

– 5、恢复某个screen

[qxhgd@localhost ~]$ screen -r -S make   #使用screen名恢复[qxhgd@localhost ~]$ screen -r 3764      #使用screen ls查看的序号恢复[qxhgd@localhost ~]$ screen -r    #不指定,应该会恢复上一个

如果A建立了一个screen,B可以通过screen -r进入这个screen,以达到贡献屏幕的目的。

– 6、中止 screen 会话:

按下 Ctrl+d,或者在命令行中使用 exit 命令。

detach

disown

  • 作用是从当前的shell中移除作业,只是移除并不会停止,其语法格式:
  • disown [参数] [标识符or进程ID]
  • 一般的操作步骤:

– 产生作业,具体可参考下面博文:
【Linux】【操作】Linux操作集锦系列之三——进程管理系列之(四)进程切换命令

– 查看全部作业:

[qxhgd@localhost ~]# jobs -l

– 删除作业:

[qxhgd@localhost ~]# disown -a #删除全部作业[qxhgd@localhost ~]# disown -r  #删除运行状态的作业[qxhgd@localhost ~]# disown %2  #删除指定的某个作业

利用/dev/null

  • 通过shell启动一个firefox,但是希望shell退出之后,不影响firefox的执行:
$ firefox </dev/null &>/dev/null &

suspend

  • 挂起shell的执行,直到收到SIGCONT信号。除非使用-f选项,否则无法对login shell使用;
  • 该命令需要set选项monitor处于开启状态时才能执行;
  • 一般的操作逻辑:

– 打开一个终端T1,首先获取PID。

[qxhgd@localhost ~]$echo $$

– 在T1终端中执行挂起命令

[qxhgd@localhost ~]$suspend

– 再打开一个终端T2,发送SIGCONT命令

[qxhgd@localhost ~]$kill -s SIGCONT PID # 此时之前的终端结束挂起状态,可以正常交互。

nohup

  • nohup - run a command immune to hangups, with output to a non-tty
  • 下面的例子,执行之后,即使当前终端关闭掉,也不会影响tar命令的执行。
[qxhgd@localhost ~]$ nohup tar -czvf xx.tar.gz . &[1] 8642[qxhgd@localhost ~]$ nohup: ignoring input and appending output to ‘nohup.out’

daemonize

  • daemonize runs a command as a Unix daemon,可以创建一个daemon进程:
[qxhgd@localhost ~]$ daemon

tmux

  • tmux是linux中一种管理窗口的程序, 不同于iTerm2, 它提供了一个Session随时存储和恢复的功能;
  • 一个Tmux的图,比较炫酷:
    在这里插入图片描述

参考资料

  • run-linux-command-process-in-background-detach-process
  • how-to-detach-linux-process-from-shell
  • screen
  • Tmux
  • Tmux入门指南
  • 4 款值得一试的 Linux 终端多路复用器
  • daemonize — A tool to run a command as a daemon

如本文对你有些许帮助,欢迎大佬加关注、评论、点赞,有关必回关