背景有时我们运行某个任务,需要保证任务不占据终端影响其他作业,或者保证当前session退出后,任务依然可以继续运行 。
方案
- command &
- nohup command &
- CTRL+Z;bg %n; disown %n
- setsid command
该方法可以使任务放在后台执行,从而不影响当前终端其他作业,但是如果当前终端退出,也会导致后台任务接收到SIGHUP信号并退出 。
-rwx------. 1 Appmanager devops 69 Jun 19 06:07 findBigFiles.bash[appmanager@localhost toutiao]$ cat findBigFiles.bash #! /bin/bashsleep 1mfind $HOME -size +10M | xargs ls -l --block-size=M[appmanager@localhost toutiao]$ ./findBigFiles.bash > output.log &[1] 2644## 退出当前终端,新开终端并查看进程[appmanager@localhost ~]$ ps -fu appmanagerUIDPIDPPIDC STIME TTYTIME CMDappmana+276927680 06:08 pts/000:00:00 -bashappmana+281827690 06:08 pts/000:00:00 ps -fu appmanager ## 重新后台执行程序[appmanager@localhost toutiao]$ ps -fu appmanagerUIDPIDPPIDC STIME TTYTIME CMDappmana+276927680 06:08 pts/000:00:00 -bashappmana+288927690 06:11 pts/000:00:00 /bin/bash ./findBigFiles.bashappmana+289028890 06:11 pts/000:00:00 sleep 1mappmana+289127690 06:12 pts/000:00:00 ps -fu appmanager[appmanager@localhost toutiao]$ ps -fu appmanagerUIDPIDPPIDC STIME TTYTIME CMDappmana+276927680 06:08 pts/000:00:00 -bashappmana+290627690 06:13 pts/000:00:00 ps -fu appmanager[1]+Done./findBigFiles.bash > output.log[appmanager@localhost toutiao]$ cat output.log -rw-------. 1 appmanager devops 35M May 28 19:06 /home/appmanager/.cache/pip/http/d/6/1/f/e/d61fe4b09676f0692c240e67193e3af065d7b9e72f8577595151e51f-rw-r--r--. 1 appmanager devops 11M May 16 08:49 /home/appmanager/mnt/ansible/roles/Tomcat/files/Apache-tomcat-8.5.79.tar.gznohup command &【linux任务后台执行】nohup可以使shell命令忽略SIGHUP信号,避免父进程退出时,子进程也退出 。&使任务后台执行 。[appmanager@localhost toutiao]$ nohup $HOME/tmp/toutiao/findBigFiles.bash > output.log 2>&1 &## 退出当前终端,新开终端并查看进程[appmanager@localhost ~]$ psfu UIDPIDPPIDC STIME TTYTIME CMDappmana+304510 06:20 ?00:00:00 /bin/bash /home/appmanager/tmp/toutiao/findBigFiles.bashappmana+304630450 06:20 ?00:00:00 sleep 1mappmana+310231011 06:21 pts/000:00:00 -bashappmana+313431020 06:21 pts/000:00:00 ps -fu appmanager[appmanager@localhost ~]$ psfu UIDPIDPPIDC STIME TTYTIME CMDappmana+310231010 06:21 pts/000:00:00 -bashappmana+315431020 06:22 pts/000:00:00 ps -fu appmanager[appmanager@localhost ~]$ cat tmp/toutiao/output.log nohup: ignoring input-rw-------. 1 appmanager devops 35M May 28 19:06 /home/appmanager/.cache/pip/http/d/6/1/f/e/d61fe4b09676f0692c240e67193e3af065d7b9e72f8577595151e51f-rw-r--r--. 1 appmanager devops 11M May 16 08:49 /home/appmanager/mnt/ansible/roles/tomcat/files/apache-tomcat-8.5.79.tar.gzCTRL+Z;bg %n; disown %n使用disown可以忽略执行jobs id接收到的SIGHUP信号,避免父进程的退出而导致子进程的退出 。## CTRL + 会暂停当前执行的程序[appmanager@localhost toutiao]$ bash -x ./findBigFiles.bash > output.log 2>&1^Z[1]+Stoppedbash -x ./findBigFiles.bash > output.log 2>&1[appmanager@localhost toutiao]$ bg %1[1]+ bash -x ./findBigFiles.bash > output.log 2>&1 &[appmanager@localhost toutiao]$ disown %1## 退出当前终端,新开终端并查看进程+ sleep 1m+ xargs ls -l --block-size=M+ find /home/appmanager -size +10M-rw-------. 1 appmanager devops 35M May 28 19:06 /home/appmanager/.cache/pip/http/d/6/1/f/e/d61fe4b09676f0692c240e67193e3af065d7b9e72f8577595151e51f-rw-r--r--. 1 appmanager devops 11M May 16 08:49 /home/appmanager/mnt/ansible/roles/tomcat/files/apache-tomcat-8.5.79.tar.gzsetsid commandsetsid指定当前进程的父进程为1,不受当前session的退出的影响,但是前提是需要在命令执行时就设置 。[appmanager@localhost toutiao]$ setsid ./findBigFiles.bash > output.log 2>&1 &[1] 3823[appmanager@localhost toutiao]$ psfu UIDPIDPPIDC STIME TTYTIME CMDappmana+372937280 06:43 pts/000:00:00 -bashappmana+382410 06:49 ?00:00:00 /bin/bash ./findBigFiles.bashappmana+382538240 06:49 ?00:00:00 sleep 1mappmana+382637290 06:49 pts/000:00:00 ps -fu appmanager[1]+Donesetsid ./findBigFiles.bash > output.log 2>&1## 退出当前终端,新开终端并查看进程[appmanager@localhost toutiao]$ psfu UIDPIDPPIDC STIME TTYTIME CMDappmana+372937280 06:43 pts/000:00:00 -bashappmana+382410 06:49 ?00:00:00 /bin/bash ./findBigFiles.bashappmana+382538240 06:49 ?00:00:00 sleep 1mappmana+382737290 06:49 pts/000:00:00 ps -fu appmanager[appmanager@localhost toutiao]$ lltotal 4-rwx------. 1 appmanager devops 74 Jun 19 06:11 findBigFiles.bash-rw-r--r--. 1 appmanager devops0 Jun 19 06:49 output.log[appmanager@localhost toutiao]$ cat /opt/cat: /opt/: Is a directory[appmanager@localhost toutiao]$ cat output.log -rw-------. 1 appmanager devops 35M May 28 19:06 /home/appmanager/.cache/pip/http/d/6/1/f/e/d61fe4b09676f0692c240e67193e3af065d7b9e72f8577595151e51f-rw-r--r--. 1 appmanager devops 11M May 16 08:49 /home/appmanager/mnt/ansible/roles/tomcat/files/apache-tomcat-8.5.79.tar.gz
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- linux系统转义符有哪些?
- 安卓|基于Android 13定制 OPPO ColorOS 13曝光:彻底解决杀后台问题
- Linux|开源软件巨头发布Euler Linux 2.0:支持华为鲲鹏、飞腾处理器
- 原神班尼特邀约任务怎么做?
- 光遇圣岛季编钟任务怎么做?
- 最小linux桌面系统?世界上最小的计算机
- 奔驰|大众奔驰支持欧盟2035年禁售燃油车 宝马尚未表态:专家称任务困难
- 原神隐藏任务有哪些?
- linux之inode文件系统详解
- VMware Workstation Linux 安装及桥接网络
