首页 > 记一次shell脚本推后台stopped的问题

记一次shell脚本推后台stopped的问题

我们知道linux 下shell可以被分为交互式脚本和非交互式脚本。

交互式脚本即 输入命令之后shell会等待你的输入,当你输入之后命令会被立即提交从而执行。这个时候我们常见的终端bash,以及login提示等都是交互式命令。

非交互式脚本即shell解释器不需要等待终端的输入,自己去执行脚本中的命令,当遇到脚本中的EOF则结束。

交互式脚本因为需要等待终端命令的输入,与终端进行交互,当将交互式脚本推后台;此时后台程序视图读取终端,此时终端驱动程序将检测这种情况,并向后台作业发送一个特定信号SIGTTIN,该信号会停止此后台程序,并向用户发送通知。最终推后台的进程会出现stopped状态。

交互式脚本的退后台使用./camSvr < /dev/null &使用null作为输入设备,此时脚本可以正常执行。

异常场景:

编写服务器程序:calc_osd_memory.sh,使用top抓取指定进程内存信息,并进行分析记录日志。./calc_osd_memory.sh正常执行,但是当执行./calc_osd_memory.sh &推后台出现stopped进程被终止。

因为脚本中存在交互式命令top,使用方式为/usr/bin/top -n 1 -c -u ceph,此时脚本中主要获取信息的外界命令为top,经过分析出现此时stopped是通过其他程序或者脚本在非交互模式下调用top就会出现,解决方式是去掉top的交互模式,使用批处理模式如下:

增加-b参数:/usr/bin/top -n 1 -c -b -u ceph

参数描述:

Starts top in ‘Batch’ mode, which could be useful for sending output from top to other programs or to a file.

In this mode, top will not accept input and runs until the iterations limit you’ve set with the ‘-n’ command-line option or until killed.

更多相关:

  • 在本课程中,您将学习如何在Unity中使用可视化脚本(以前称为Bolt)以及如何在不编写一行代码的情况下创建自己的高级游戏所需的一切。本课程将教你如何掌握可视化脚本,即使你以前没有任何关于unity或编程的经验。 课程获取:Unity 3D学习视觉脚本无需编码即可创建高级游戏-云桥网 本课程首先为绝对初学者介绍unity,因...

  • The complete AutoCAD Automation tasks course Using Script MP4 |视频:h264,1280×720 |音频:AAC,44.1 KHz,2 Ch 语言:英语+中英文字幕(根据原英文字幕机译更准确) |时长:42节课(4h 25m) |大小:3.35 GB 含课程文件 学...

  • 在linux系统中想要记录所有登录过当前系统的用户操作,排查有人对当前系统做的何种操作导致系统问题,可以按照如下方法进行。 前言 在描述操作步骤之前,先说一下系统环境变量的相关配置文件 ~/.bashrc和~/.bash_file,这两个文件是当前用户shell下生效的环境变量配置文件。修改完成之后需要source 一下对应的配...

  • 我的自动化脚本在运行的时候,会生成一个界面,点击该页面上的按钮能够进行自动化操作。 经常遇到的一个问题是: 脚本运行一半,GUI程序出现了异常情况,这个时候,再次点击生成的界面上的按钮,不会有任何反应,我需要重新启动exe文件,程序的健壮性受到了考验。 为了解决这个问题,只需要在脚本中加入少量的错误验证即可: $ch...

  • shell脚本在系统启动时推后台自动执行,发现其中/usr/bin/top -n 1 -c -b -u ceph 命令并无输出 但是系统启动之后手动执行脚本,&推后台脚本中的top仍然能够正常输出,仅仅是系统发生重启,该功能就不生效了 stackoverflow 推荐增加 -w 参数 即/usr/bin/top -n 1 -c -...

  • /// 

            /// //从空间数据库中删除所有拓扑对象         ///          ///          public bool DeleteALLTopolgyFromGISDB()        {            ...