前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >nohup和setsid实现linux后台运行执行 shell 脚本

nohup和setsid实现linux后台运行执行 shell 脚本

作者头像
Yangsh888
发布于 2022-03-28 09:12:40
发布于 2022-03-28 09:12:40
3K00
代码可运行
举报
文章被收录于专栏:Yangsh888的专栏Yangsh888的专栏
运行总次数:0
代码可运行

会中断后台运行脚本

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
执行脚本test.sh:./test.sh
中断脚本test.sh:ctrl+c
在1的基础上将运行中的test.sh,切换到后台并暂停:ctrl+z
执行ctrl+z后,test.sh在后台是暂停状态(stopped),使用命令:bg number让其在后台开始运行(“number”是使用jobs命令查到的 [ ]中的数字,不是pid)

直接在后台运行脚本test.sh:./test.sh &
查看当前shell环境中已启动的任务情况:jobs
将test.sh切换到前台运行:fg %number(”number”为使用jobs命令查看到的 [ ] 中的数字,不是pid)
中断后台运行的test.sh脚本:先fg %number切换到前台,再ctrl+c;或是直接kill %number

以上两种在后台运行test.sh的方法,当遇到退出当前shell终端时,后台运行的test.sh也就结束了。

不中断后台运行脚本

这是因为以上两种方法使得test.sh在后台运行时,运行test.sh进程的父进程是当前shell终端进程,关闭当前shell终端时,父进程退出,会发送hangup信号给所有子进程,子进程收到hangup以后也会退出。所以要想退出当前shell终端时test.sh继续运行,则需要使用nohup忽略hangup信号。

nohup test.sh &

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
不中断的在后台运行test.sh:nohup ./test.sh &(test.sh的打印信息会输出到当前目录下的nohup.out中)
使用jobs可看到test.sh处于running状态
使用ps -ef |grep test.sh可查看到正在运行的test.sh脚本进程
退出当前shell终端,再重新打开,使用jobs看不到正在运行的test.sh,但使用ps -ef可以看到

在后台不中断的运行test.sh,可以使用nohup忽略hangup信号,或者使用setsid将其父进程改为init进程(进程号为1) 实际上就是把控制台的内容输出到了 nohup.out这个文件里了 如果查看控制台内容的话就tail -f nohup.out就行

setsid test.sh &

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
不中断的在后台运行test.sh另一个命令:setsid ./test.sh &
使用ps -ef |grep test.sh可看到test.sh进程的父进程id为1

测试脚本

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/bin/bash
 
int=1
while(( $int<=100 ))
do
    echo $int
    let "int++"
    sleep 1
done

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
在linux后台运行脚本的方法和命令
后台运行脚本 执行脚本test.sh:./test.sh 中断脚本test.sh:ctrl+c 在1的基础上将运行中的test.sh,切换到后台并暂停:ctrl+z 执行ctrl+z后,test.sh在后台是暂停状态(stopped),使用命令:bg number让其在后台开始运行(“number”是使用jobs命令查到的 [ ]中的数字,不是pid) 直接在后台运行脚本test.sh:./test.sh & 查看当前shell环境中已启动的任务情况:jobs 将test.sh切换到前台运行:fg %number(”number”为使用jobs命令查看到的 [ ] 中的数字,不是pid) 中断后台运行的test.sh脚本:先fg %number切换到前台,再ctrl+c;或是直接kill %number 以上两种在后台运行test.sh的方法,当遇到退出当前shell终端时,后台运行的test.sh也就结束了。这是因为以上两种方法使得test.sh在后台运行时,运行test.sh进程的父进程是当前shell终端进程,关闭当前shell终端时,父进程退出,会发送hangup信号给所有子进程,子进程收到hangup以后也会退出。所以要想退出当前shell终端时test.sh继续运行,则需要使用nohup忽略hangup信号。
大数据流动
2020/06/19
3.6K0
使程序在Linux下后台运行
我们计算的程序都是周期很长的,通常要几个小时甚至一个星期。我们用的环境是用putty远程连接到日本Linux服务器。所以使程序在后台跑有以下三个好处:
SingYi
2022/07/14
4.4K0
linux命令后台运行
1. command & : 后台运行,你关掉终端会停止运行 2. nohup command & : 后台运行,你关掉终端也会继续运行
RainMark
2019/09/10
10K0
linux 后台运行进程:& , nohup
当我们在终端或控制台工作时,可能不希望由于运行一个作业而占住了屏幕,因为可能还有更重要的事情要做,比如阅读电子邮件。对于密集访问磁盘的进程,我们更希望它能够在每天的非负荷高峰时间段运行(例如凌晨)。为了使这些进程能够在后台运行,也就是说不在终端屏幕上运行,有几种选择方法可供使用。
DevOps在路上
2023/05/16
5K0
linux 后台运行进程:& , nohup
Linux 进程后台运行的几种方式(screen)
本文介绍了Linux进程后台运行的几种方式,包括nohup、setsid、screen等工具的使用方法,以及这些工具在系统管理、运维方面的应用。同时还介绍了如何通过screen工具创建、管理、恢复会话,以及如何使用nohup、setsid等命令在后台运行进程。
惨绿少年
2017/12/27
4K0
Linux - 请允许我静静地后台运行
枕边书
2018/01/04
1.8K0
Linux - 请允许我静静地后台运行
Linux下几种运行后台任务的方法
今天就给大家介绍 linux 中几种后台任务的执行方法避免上述问题。1. 问题的引入程序员最不能容忍的是在使用终端的时候往往因为网络,关闭屏幕,执行 CT 今天就给大家介绍 linux 中几种后台任务的执行方法避免上述问题。 1. 问题的引入 程序员最不能容忍的是在使用终端的时候往往因为网络,关闭屏幕,执行 CTRL+C 等原因造成 ssh 断开造成正在运行程序退出,使得我们的工作功亏一篑。 其背后的主要原因在于上述的相关操作,shell 默认会发送中断信号给该终端 session 关联的进程,从而导致进
入门笔记
2022/06/03
3.1K0
linux 后台运行方法总结
多种后台运行方法总结,nohup, disown, setsid, (...&), screen, tmux
PedroQin
2020/06/22
3.9K0
CentOS后台运行、关闭、查看后台任务
& 加在一个命令的最后,可以把这个命令放到后台执行, watch -n 10 sh test.sh & #每10s在后台执行一次test.sh脚本
薛定喵君
2019/11/06
8.5K0
4、shell脚本后台运行知识
在实际工作中,一般会通过ssh连接服务器,隐藏可能就会有脚本或命令在执行期间不能中断的需求,若中断,则不仅前功尽弃,还可能破坏系统数据,下面是防止脚本执行终端的3种方法:
jackxiao
2021/11/16
2.7K0
CentOS后台执行命令
查看当前有多少在后台运行的命令 jobs -l选项可显示所有任务的PID,jobs的状态可以是running, stopped, Terminated。但是如果任务被终止了(kill),shell 从当前的shell环境已知的列表中删除任务的进程标识。
码客说
2022/11/22
2.7K0
Linux 后台运行python .sh等程序,以及查看和关闭后台运行程序操作
直接用./sh 文件就可以运行,但是如果想后台运行,即使关闭当前的终端也可以运行的话,需要nohup命令和&命令。
学到老
2019/03/05
11.7K0
Linux nohup 用法
---- 最近在写一个监控服务程序,通过交叉监控来监控我们的线上服务。比如我有两台服务器分别为A和B,在A上部署监控程序来监控服务器B,在B上部署监控程序来部署A.由于监控服务要严格按照我们自定制的业务需求来监控,所有监控服务需要自己实现并部署在后台一直运行。所以我就选择了比较简单的nohup命令,比较轻量也很容易部署。 nohup 当用户logout、网络中断和断开连接时,中断会接收到HUP(hangup)信号从而关闭其所有运行的子进程。所以我们解决该问题有两种方式: 让进程忽略HUP signal。 让
吕海峰
2018/04/03
5K0
Linux nohup 用法
Linux 让进程在后台可靠运行的几种方法
我们经常会碰到这样的问题,用 telnet/ssh 登录了远程的 Linux 服务器,运行了一些耗时较长的任务, 结果却由于网络的不稳定导致任务中途失败。如何让命令提交后不受本地关闭终端窗口、网络断开连接的干扰呢?
小小工匠
2021/08/16
1K0
Linux 进程的前台/后台切换
当你用shell启动一个程序时,往往他是在前台工作的。程序会一直占用终端命令行,例如你在前台解压的时候必须等着,期间干不了别的事(除非另开一个终端)。 例如经常用连接到远程服务器执行脚本的时候,如果本地网络中断后,这个时候前台进程就结束了,比较的懊恼,必须重新执行。
久绊A
2024/03/02
4390
如何使程序在Linux后台运行
这样一来,test程序就在后台运行了。但是,这样处理还不够,因为这样做虽然程序是在后台运行了,但log依然不停的输出到当前终端。因此,要让终端彻底的清静,还应将log重定向到指定的文件:
阿凡亮
2020/04/14
9K0
让linux程序在后台运行
最近要用php进程发奖励,因为要精确到秒执行,linux系统的定时用不了,于是写了个死循环,usleep是必须的,否则系统cpu占用很高的系统cpu。
用户3094376
2018/09/12
5.2K0
Linux运行与控制后台进程的方法
我们经常会碰到这样的问题,用ssh登录了远程的Linux服务器,运行了一些耗时较长的任务,结果却由于网络等的不稳定导致任务中途失败。 这是由于在用户注销(logout)或者网络断开时,终端会收到 HUP(hangup)信号从而关闭其所有子进程。 解决办法有两种:让进程忽略HUP信号,或让进程运行在新的会话里从而成为不属于此终端的子进程。
星哥玩云
2022/06/07
2K0
Linux学习笔记之Linux 让进程在后台可靠运行的几种方法
我们经常会碰到这样的问题,用 telnet/ssh 登录了远程的 Linux 服务器,运行了一些耗时较长的任务, 结果却由于网络的不稳定导致任务中途失败。如何让命令提交后不受本地关闭终端窗口/网络断开连接的干扰呢?下面举了一些例子, 您可以针对不同的场景选择不同的方式来处理这个问题。
Jetpropelledsnake21
2018/12/25
1.2K0
如何在后台运行Linux命令?
通常情况下,在 Linux 终端中运行命令时,我们必须等前一命令执行完成后,在输入并执行后一条命令,称之为在前台或前台进程中运行命令,进程在前台运行时,将占用您的外壳,并且您也可以使用输入设备与其终端进行交互。
杰哥的IT之旅
2020/06/18
3.9K0
相关推荐
在linux后台运行脚本的方法和命令
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档