OS-前后台切换

本文最后更新于:2023年1月23日 下午

前台进程与后台进程的区别

前台进程:是在终端中运行的命令,那么该终端就为进程的控制终端,一旦这个终端关闭,这个进程也随之消失。

后台进程:也叫守护进程(Daemon),是运行在后台的一种特殊进程,不受终端控制,它不需要终端的交互;Linux的大多数服务器就是使用守护进程实现的。比如Web服务器的httpd等。

前言

我们知道,当用户注销(logout)或者网络断开时,终端会收到 HUP(hangup)信号从而关闭其所有子进程。因此,我们的解决办法就有两种途径:要么让进程忽略 HUP 信号,要么让进程运行在新的会话里从而成为不属于此终端的子进程。

nohup:让提交的命令忽略 hangup 信号。只需在要处理的命令前加上 nohup 即可,标准输出和标准错误缺省会被重定向到 nohup.out 文件中。

&:加在一个命令的最后,可以把这个命令放在后台执行

Ctrl+z:将一个正在前台执行的命令放到后台,并且处于暂停状态。

Ctrl+c:终止前台进程

jobs:查看当前有多少在后台运行的命令。jobs -l选项可显示所有任务的PID,jobs的状态可以是running, stopped, Terminated。但是如果任务被终止了(kill),shell 从当前的shell环境已知的列表中删除任务的进程标识。

fg:(foregroud process)将后台中的命令调至前台继续运行。如果后台中有多个命令,可以用fg %jobnumber(是命令编号,不是进程号)将选中的命令调出。

bg:(backgroud process)将一个在后台暂停的命令,变成在后台继续执行。如果后台中有多个命令,可以用bg %jobnumber将选中的命令调出。

kill

  • 通过jobs命令查看job号(假设为num),然后执行kill %num
  • 通过ps命令查看job的进程号(PID,假设为pid),然后执行kill pid

screen

screen 能够避免 HUP 信号的影响

  • 创建:screen -S name
  • Ctrl+a +d :detach,暂时离开当前session,将目前的 screen session 丢到后台执行
  • screen -dmS <session name>来建立一个处于断开模式下的会话(并指定其会话名)。
  • screen -listscreen -ls:列出所有会话。
  • screen -r <session name>:重新连接指定会话。
  • 删除Screen:screen -S <session name> -X quit 或 在screen中输入exit
  • screen -d <screenid> 将会话状态修改为 Detached
[root@pvcent107 ~]# screen -dmS Urumchi
[root@pvcent107 ~]# screen -list
There is a screen on:
        12842.Urumchi   (Detached)
1 Socket i
[root@pvcent107 ~]# screen -r Urumchi

当我们用-r连接到 screen 会话后,我们就可以在这个伪终端里面为所欲为,再也不用担心 HUP 信号会对我们的进程造成影响,也不用给每个命令前都加上nohup或者setsid了。

attached模式在前台运行,detached模式在后台运行。

删除:screen -S name -X quit 指定作业离线:screen -d name

Tmux

Tmux 是一个强大的多路复用器,它允许我们在单个窗口中运行多个终端会话。对于不熟悉它的人来说,学习 tmux 是一个很好的选择。Tmux 使在 Linux 中运行后台命令毫不费力。

tmux new -d 'ping -c 10 8.8.8.8 > www.itpro.net.cn.log'

当您运行上述tmux命令时,它将在单独的 shell 中执行ping命令并将其保留在后台。您可以使用此方法在后台执行任何 Linux 命令。具体参考Tmux 使用教程


OS-前后台切换
http://agustletmen.github.io/2023/01/23/OS-前后台/
作者
Agust
发布于
2023年1月23日
更新于
2023年1月23日
许可协议