当我们在终端或控制台工作时,可能不希望由于运行一个作业而占住了屏幕,因为可能还有更重要的事情要做,比如阅读电子邮件。对于密集访问磁盘的进程,我们更希望它能够在每天的非负荷高峰时间段运行(例如凌晨)。...,终端被该作业占据;可以在命令后面加上& 实现后台运行。...(ps -ef | grep 进程号 或者 kill -9 进程号) nohup 使用&命令后,作业被提交到后台运行,当前控制台没有被占用,但是一但把当前控制台关掉(退出帐户时),作业就会停止运行。...2>&1 是将标准出错 重定向到标准输出,这里的标准输出已经重定向到了out.file文件,即将标准出错也输出到out.file文件中。最后一个&, 是让该命令在后台执行。...如果将他们写到 .sh 脚本中,然后执行脚本,是显示不出来的 比如执行下面这个脚本后,jobs 显示不出来: #!
& 首先是我们最经常遇到的符号 &,将它附在命令后面可以使进程在后台执行,不会占用前台界面。它实际上是在会话中开启了一个后台作业,对作业的操作我们后面再说。...而在 shell 脚本内,setsid 不是进程组长,它不会 fork() 子进程,而是由 bash 来fork() 一个子进程,而 bash 会 wait() 子进程,所以表现得像 setsid 在...我们直接开启了某个进程,又想在不中断进程的情况下让它让出前台终端; 这些都要牵涉到今天的第二个模块--作业; 我们在终端里运行的命令都可以理解为一个作业,有的占用前台终端,有的在后台默默执行,下面的命令就是为了调度这些作业...结合 ctrl+z 和 bg 命令,我们可以解决上面提出的第一个问题,不停止地将正在占用终端的进程放到后台执行。 fg fg 与 bg 相对,使用它可以把作业放到前台来执行。...一直在更新,欢迎 关注 。 参考: setsid为什么会在脚本中阻塞-StackoOerflow Linux 进程、进程组、会话周期、控制终端
但是这样可以在不终止进程的情况下能深入脚本内部一窥究竟。 Ctrl+z 会生成一个SIGTSTP信号,停止shell中运行的任何进程。...16.1.5 修改或移除捕获 在脚本中的不同位置进行不同的捕获处理,需要重新使用带有新选项的trap命令。 修改了信号捕获后,脚本处理信号的方式就会发生变化。 也可以删除以及设置好的捕获。...那么值钱带减号的就变成默认作业了。 16.4.2 重启停止的作业 可以将已停止的作业作为后台进程或前台进程(会接管你当前工作的终端)重启。 用bg命令实现。 bg 加上作业号。...不加作业号可以重启默认作业。 当有多个作业时必须加上作业号。 实例: ? Ctrl + Z停止作业。 注意:bg 重启后是后台作业,ctrl + c 是接受不到的。...以前台模式重启作业,可用带作业号的fg命令。 比如:fg 2 例子就像上面一样,把bg换成fg就好了。 16.5 调整谦让度 在多任务操作系统中,内核负责将cpu时间分配给系统上运行的每一个进程。
有了这个线索之后,银时同学立刻看了一下对方测试环境的脚本,简化后如下: $ cat test.sh #!/bin/bash cd /data/server/tomcat/bin/ ....交互模式与非交互模式对作业控制(job control)默认方式不同 为什么在交互模式下shell不会对后台进程处理SIGINT信号设置为忽略,而非交互模式下会设置为忽略呢?...还是比较好理解的,举例来说,我们先某个前台进程运行时间太长,可以ctrl-z中止一下,然后通过bg %n把这个进程放入后台,同样也可以把一个cmd &方式启动的后台进程,通过fg %n放回前台,然后在ctrl-c...而非交互模式下,通常是不需要作业控制的,所以作业控制在非交互模式下默认也是关闭的(当然也可以在脚本里通过选项set -m打开作业控制选项)。...如果我们在test.sh里设置开启作业控制的话,就不会让java进程退出了 #!/bin/bash set -m cd /home/admin/tt/tomcat/bin/ .
停止该脚本。...~~~~~~~~~~~~~ 要在命令行界面以后台模式运行shell脚本,只要在命令后加个&就可以,可以在命令行提示符下同时启动任意多个后台作业 [root@aoi ~]# sh i & [1] 1568...停止,无条件终止,以及恢复作业的这些功能统称为作业控制。...jobs命令允许查看shell当前正在处理的作业。 重启停止的作业 bg 2 2是作业号 bg是以后台形式重启,此时还可以输入其他命令。...fg 2 是前台模式重启,此时命令行提示符不会出现,知道该作业完成 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -20
8.6 管道符和作业控制 管道符、作业控制 ctrl z //暂停一个任务 jobs //查看后台的任务 bg [id] //把任务调到后台 fg [id] //把任务调到前台 命令后面加&直接丢到后台...(丢到后台去了),回到命令行界面,去操作其他的任务 fg 命令可以把丢在后台的命令,调回前台 可以控制多个任务,将他们暂停掉 jobs 命令,可以把暂停的任务列出来 暂停多个任务后,并会显示停止的任务列出来...1.txt [2]+ 已停止 vim 2.txt [root@localhost ~]# fg [id] 命令,把任务调到前台并执行——>不加id号就是执行最后一次的任务...)去运行 在结束任务的时候,必须是在前台才能结束——>(否则在后台是无法结束任务的) sleep 1000 命令,暂停一千秒,什么事都不做,一千秒之后把命令窗口恢复回来 [root@localhost...profile,profile又会自动的调用bashrc bashrc是执行shell脚本的时候,用户不用登录,就可以直接执行shell脚本,执行shell脚本就会调用bashrc里面的一些配置 -系统中的
当我们在命令行提示符后输入类似./helloworld程序时,在程序运行时终端被占用,此时无法执行其它操作。即使使用....) ps:进程和进程组ID都是 10263,父进程是 bash(10179),因为是在 Shell 上执行的命令 cat:进程组 ID 与 ps 的进程组 ID 相同,父进程同样是 bash(10179...) 容易理解 Bash 就是Shell进程,Shell 父进程是 sshd;ps 与 cat 通过管道符号一起运行,属于一个进程组,其父进程都是 Bash;一个进程组也被称为「作业」。...会话可以有一个进程组称为会话的「前台作业」,其它进程组为「后台作业」 一个会话可以有一个控制终端,当控制终端有输入和输出时都会传递给前台进程组,比如Ctrl + Z。...会话的意义在于能将多个作业通过一个终端控制,一个前台操作,其它后台运行。
之前一直知道使用 Ctrl+Z 挂起前台进程来阻止进程运行,之后可以再通过 shell 的作业控制 (jobs / fg N) 来将后台进程切换为前台,从而继续运行。.../deadloop.sh > 首先可以看到重启后的输出序号与重启前的可以接上,所以中间并没有输出丢失,也就是说是进程被暂停了,而不只是输出停止了。...另一方面,我们启动 stap 探测进程间信号的收发,可以在 Ctrl+Z 停止进程时收到以下的输出: stap_signal.sh 22 events/3 16688 usleep...write 系统调用,后者停止在了 waitpid 系统调用。...如果再打开 IXANY 标志位,则使用任意键都可以重启被停止的输出,而不一定要使用 Ctrl+Q。 最后,还有一个隐藏的前提,就是被暂停的进程在前台有频繁的输出,否则 Ctrl+S 也无用武之地。
当我们在终端或控制台工作时,可能不希望由于运行一个作业而占住了屏幕,因为可能还有更重要的事情要做,比如阅读电子邮件。对于密集访问磁盘的进程,我们更希望它能够在每天的非负荷高峰时间段运行(例如凌晨)。...& 当在前台运行某个作业时,终端被该作业占据;可以在命令后面加上& 实现后台运行。例如:sh test.sh & 适合在后台运行的命令有f i n d、费时的排序及一些s h e l l脚本。...(ps -ef | grep 进程号 或者 kill -9 进程号) nohup 使用&命令后,作业被提交到后台运行,当前控制台没有被占用,但是一但把当前控制台关掉(退出帐户时),作业就会停止运行...所以在使用nohup命令后台运行命令之后,需要使用exit正常退出当前账户,这样才能保证命令一直在后台运行。 ctrl + z 可以将一个正在前台执行的命令放到后台,并且处于暂停状态。...2>&1 是将标准出错重定向到标准输出,这里的标准输出已经重定向到了out.file文件,即将标准出错也输出到out.file文件中。最后一个&, 是让该命令在后台执行。
在了解守护进程之前,需要先知道什么是什么是终端?什么是作业?什么是进程组?什么是会话?...shell分前后台作业来控制的不是进程而是作业。一个作业由多个进程组成。Shell可以运行一个前台作业和任意多个后台作业,称为作业控制。bash就是一个独立的作业。...一个会话中,有一个前台作业和若干个后台作业。会话SID是会话手进程的PID。 为什么只能运行一个前台作业?...当我们在前台新起了一个作业,shell就被提到了后台,因此shell就没有办法再继续接受我们的指令并且解析运行了。...setsid() 调用成功后,进程成为新的会话组长和新的进程组长,并与原来的登录会话和进程组脱离。
Ctrl+z/bg/nohup/setsid/& 在Linux中,如果要让进程在后台运行,一般情况下,我们在命令后面加上&即可,实际上,这样是将命令放入到一个作业队列中了: ....ctrl+z暂停已经运行的进程,然后使用bg命令将停止的作业放到后台运行:bg %1,放回前台运行:%1。.../rsync.sh screen创建一个执行脚本的单窗口会话,可以attach进程ID # screen -wipe 检查目前所有的screen作业,并删除已经无法使用的screen作业 正常情况下,当你退出一个窗口中最后一个程序...(通常是bash)后,这个窗口就关闭了。...另外,Ctrl+a在bash下是用来回到行开头,不幸与上面的组合快捷键冲突。
针对 Bash 中一些极容易出错的细节,我们在这里总结了 10 条编程注意事项,希望对各位泛 Linux 环境的开发者有所裨益。...使用后台任务 在 Bash 中,可以通过在命令后添加 & 符号实现后台多任务。例如: long_running_command & 把进程放入后台后,还可以通过 fg 命令将其切换到前台。...活用 set 命令 在其他语言中,通常遇到错误的语句时,编译器就会报错并停止运行,但 Bash 不会。...因此为了保证代码的安全性和正确性,我们可以在代码中用 set -e 对 Bash 环境进行一些额外设置,-e 表示出现错误就停止。...这也是为什么许多 shell 脚本都以 set -eu 或者 set -eux 等做为开头的原因,因为这样就可以让脚本运行在更安全的环境下。
针对 Bash 中一些极容易出错的细节,我们在这里总结了 10 条编程注意事项,希望对各位泛 Linux 环境的开发者有所裨益。...使用后台任务 在 Bash 中,可以通过在命令后添加 & 符号实现后台多任务。例如: long_running_command & 把进程放入后台后,还可以通过 fg 命令将其切换到前台。...活用 set 命令 在其他语言中,通常遇到错误的语句时,编译器就会报错并停止运行,但 Bash 不会。...因此为了保证代码的安全性和正确性,我们可以在代码中用 set -e 对 Bash 环境进行一些额外设置,-e 表示出现错误就停止。...这也是为什么许多 shell 脚本都以 set -eu 或者 set -eux 等做为开头的原因,因为这样就可以让脚本运行在更安全的环境下。 来源:jvns.ca
管道符、作业控制 ctrl z //暂停一个任务 jobs //查看后台的任务 bg [id] //把任务调到后台 fg [id] //把任务调到前台 命令后面加&直接丢到后台 管道符的使用 管道符 |..../.bash_profile ./.bashrc ./.cshrc ./.tcshrc ....(丢到后台去了),回到命令行界面,去操作其他的任务 fg 命令可以把丢在后台的命令,调回前台 可以控制多个任务,将他们暂停掉 jobs 命令,可以把暂停的任务列出来 暂停多个任务后,并会显示停止的任务列出来...)去运行 在结束任务的时候,必须是在前台才能结束——>(否则在后台是无法结束任务的) sleep 1000 命令,暂停一千秒,什么事都不做,一千秒之后把命令窗口恢复回来 [root@localhost...^Z [2]+ 已停止 sleep 200 在调到前后台运行的时候,不指定id号,就是默认最后一条执行命令 & 符号,把任务丢到后台去执行 [root@localhost
有时候我们直接在终端中执行了命令,等待很长时间后发现还需要很久才能执行完,又不想一直开着终端等待结果,可以按照下面的方式,将前台进程转至后台,并重定向输出内容至文件,以便随时连接回来查看执行状态。...示例程序 假设我们需要执行很久的任务是下面这段脚本:每隔五秒打印一段内容至控制台。...前台任务转后台任务 先按 Ctrl+z 中断当前任务: ... Press Ctrl+C to stop. ^Z [1]+ 已停止 ..../test.sh 查看当前 shell 会话中所有正在运行或被停止(suspended)的后台作业的列表: $ jobs [1]+ 已停止 ..../test.sh 使用 bg %n 将指定的停止的后台作业切换到后台运行。%n 是作业编号,例如 bg %1 将作业编号为 1 的作业切换到后台运行。 $ bg %1 [1]+ .
0x01 后台执行 bg 命令 描述:用于将作业放到后台执行(backgroud)使前台可以执行其他任务,该命令的运行效果与在指令后面添加&符号;的效果是相同的,都是将其放到系统后台执行....-bash: bg: 任务已经终止 [1]+ 完成 find / -name password 注意:后台恢复执行的命令,是不能和前台有交互的,否则不能恢复到后台执行...fg 命令 描述:用于将后台作业(在后台运行的或者在后台挂起的作业)放到前台终端运行,与bg命令一样若后台任务中只有一个,则使用该命令时可以省略任务号;如果有多个任务可以fg加任务编号调用fg 1 frontground...; fg %工作号 #%工作号的%号可以省略,是工作号不是PID号 ( 作业标识:指定要放到前台的作业标识号 ) 基础示例: #示例1.使用fg命令将任务号为1的任务从后台执行转换到前台执行,输入如下命令...脚本 #修改后的Cron表达式即可完美解决问题 * */4 * * * ?
Linux bash shell单一终端界面下,我们经常需要管理或同时完成多个作业,如一边执行编译,一边实现数据备份,以及执行SQL查询等其他的任务。...所有的上述的这些工作我们可以在一个bash内实现,也就是说在同一个终端窗口完成。下面主要描述了Linux下前后台作业切换与管理以及作业在脱机的情形下如何管理。...无论是前台作业还是后台作业,两者都来自当前的shell,是当前shell的子程序。 下面是两者的定义。 前台作业:可以由用户参与交互及控制的作业我们称之为前台作业。 ...n 让后台运行的作业n切换到前台来 d、bg %n 让指定的作业n在后台运行 e、kill %n 移除指定的作业n "n" 为jobs命令查看到的job编号,...00:00:00 /bin/bash .
(查看的是容器前台进程的输出的信息)docker stats MywordPress 查看容器所占用的系统资源docker exec 容器名 容器内执行的命令 容器执行命令docker exec -it...容器名 /bin/bash 登入容器的bash--restart=always 容器的自动启动-h x.xx.xx 设置容器主机名--dns xx.xx.xx.xx 设置容器使用的 DNS 服务器--...dns-search DNS 搜索设置(搜索域);优点,搜索域名时方便,自动补全,缺点,当域名出错时,自动补全会造成更大错误--add-host hostname:IP 注入 hostname IP...github.com/creack/docker-firefox也可以通过 -f Dockerfile 文件的位置:$ docker build -f /path/to/a/Dockerfile .在.../nginx--源码包一键安装搭建脚本.sh /root/WORKDIR /root/nginx-1.19.8/RUN bash /root/nginx--源码包一键安装搭建脚本.shCMD /usr/
为什么 该现象与SIGHUP信号有关 在POSIX-compliant平台(Solaris,MacOS 等)[1]上,当终端logout时,该终端下所有进程会收到SIGHUP信号 在Android, FreeBSD...23:02 pts/12 00:00:00 grep --color=auto receive_signal 查看 receive_signal.txt 已捕捉到SIGHUP信号,并且任务进程已停止.... &) 将一个或多个命名包含在“()”中可以使这些命令在子shell 中运行中,将"&"也放入“()”内之后,可实现子shell脱离当前终端,从而摆脱当前终端SIGHUP信号影响 Tips: ()经常在脚本中做目录切换时使用...0 00:02 pts/11 00:00:00 grep --color=auto receive_signal disown 对于已经在运行的任务,nohup和setsid明显已经不适用,可通过作业调度和...,然后再用 fg 来将挂起的进程重新放回前台(也可用 bg 来将挂起的进程放在后台)继续运行。
领取专属 10元无门槛券
手把手带您无忧上云