Linux控制脚本:信号捕捉,作业控制,调整谦让度,以及计划任务
1、关于信号以及信号捕捉
(1) $ ps -au可以用来查看所有作业,包括暂停的和停止的,当然还有正在运行的。
在STAT这一列表示各个作业的状态,S表示Stop,R表示Run,T表示被追踪的或停止的。当然,你可以用kill -9 pid 的方式来终止任何你想终止的作业。(ctrl+c或者ctrl+z)
(2)信号捕捉
trap命令可以拦截你想要观察的linux信号,如果脚本收到了trap命令所捕捉的信号,它会阻止这个信号被shell处理,直接在本地处理这个信号。
使用格式为:trap commands signals。
(3)移除捕捉:见下例
例:cat test.sh
#!/bin/bash
trap "echo byebye~" EXIT (追踪退出信号)
while [ $count lt 5 ]
do
echo "loop #$count"
sleep 3
count=$(($count+1))
done
trap - EXIT (取消追踪)
echo " I just removed the trap!"
当运行该脚本./test.sh时,如果在loop内输入ctrl+c,该结束信号就会被捕捉,然后输出byebye~然后结束。若一直没有输入结束信号,则会从上到下运行,然后退出。
2、后台模式运行脚本
(1)后台运行脚本的格式为:./test.sh &,然后系统就会显示出类似下面的数字: [ 1 ] 1976,其中,[ 1 ]为作业号,1976为PID。这个脚本就会在后台运行,但是关联到这个终端上(pts/0)。该终端结束,则后台运行的关联进程都会结束。
(2)在非控制台下运行脚本,nohup命令,格式如下:
$ nohup ./test1 &
[ 1 ] 19876
$ nohup: ignoring input and appending output to 'nohup.out'
由于nohup解除了终端和进程的关联,进程会丢掉STDOUT和STDERR的链接,所以nohup命令会自动将输出的消息重定向到一个名为nohup.out的文件中。如果用nohup命令运行了另外一个程序,结果会追加到nohup.out的文件中。
3、作业控制
(1)jobs 命令可以用来查看shell当前正在处理的作业 ,jobs命令的输出结果默认会有一个“+”和“-“,其中”+“为当前默认处理的作业,”-“为下一个默认的作业,不管有多少作业,只有一个”+“和一个”-“。想要调整默认的顺序的一个方法就是jobs -l 得到PID之后,将现在前面的作业用kill命令删除即可。
(2)重启暂停的作业
在后台继续的命令为bg 2,其中2为作业号,在前台模式重启的命令为 fg 2,2同样为作业号。
4、调整谦让度。
(1)nice命令
谦让度丛-20到20,优先级丛高到低,格式为 nice -n 10 ./test.sh >test.out &
nice命令只能调整更低的优先级运行,要想调整更高的优先级,需要权限。
(2)renice命令,见下例
$ ./test > test.out &
[ 1 ] 29056
$ renice 10 -p 29056 (调整优先级)
5、定时运行作业
(1)at命令
格式:at -f filename time,如:at -f test 12:50,在12:50运行test,输出或错误会通过mail发送给用户。
atq命令用来查看系统的所有作业,而atrm是用来删除作业。如 atrm 59,其中59为作业号。
(2)cron命令
cron时间表为:分 时 日 月 星期 command,如: 15 10 * * * command。
这里有个特殊的例子就是每个月的最后一天怎么办?格式如下:00 12 1 * * if [ `date +%d -d tomorrow` =01 ] ;then ; command
crontab -l 用来查看所有的cron的作业。
当不需要精准的时间的时候,用预配置的cron脚本目录会更方便,可以用 ls /etc/cron.*命令来查看cron的几个基本目录,分别有:hourly、daily、monthly、和weekly,如果有需要每天都运行一次的脚本,只需要将脚本复制到daily的目录下,cron就会每天去执行这个脚本。
anacron程序会再运行那些错过的作业,anacron程序只会处理位于cron目录下的程序。如/etc/cron.monthly
6、启动时运行
(1)开机时运行的脚本
一般开机运行的脚本有些发行版放在了/etc/rc#.d目录中,其中#代表运行级别,其他的版本则放在了/etc/init.d目录或/etc/init.d/rc.d目录中了。这里面是各个版本独立的开机脚本,如果要定义自己的开机脚本的话,每个Linux发行版本有专门的开机文件,可以将脚本的全路径写到这个文件中,达到独特的开机过程。
(2)新shell启动
每个用户的主目录都有.bash_profile文件和.bashrc文件。当开始新的登录的时候,bash shell会运行bash_profile文件,所以可以把登陆时要运行的脚本放到该文件中。当新的shell启动的时候,bash shell会运行.bashrc的文件,所以当你想在启动新shell的时候启动别的脚本,可以加到.bashrc这个文件中去。
Linux控制脚本:信号捕捉,作业控制,调整谦让度,以及计划任务的更多相关文章
- Linux系统编程—信号捕捉
前面我们学习了信号产生的几种方式,而对于信号的处理有如下几种方式: 默认处理方式: 忽略: 捕捉. 信号的捕捉,说白了就是抓到一个信号后,执行我们指定的函数,或者执行我们指定的动作.下面详细介绍两个信 ...
- 《Linux命令行与shell脚本编程大全》第十六章 控制脚本
一些控制脚本的方式:向脚本发送信号.修改脚本优先级,在脚本运行时切换到运行模式 16.1 处理信号 linux利用信号与运行在系统中的进程进行通信. 也可以通过对脚本进行编程,使其在收到特定信号时执行 ...
- linux中脚本扑捉(trap)信号问题
扑捉ctrl+c信号: #!/bin/bash trap ; function trap() { echo "You press Ctrl+C."; echo "Exit ...
- Linux&shell之如何控制脚本
写在前面:案例.常用.归类.解释说明.(By Jim) Ctrl+C组合键可以生产SIGINT信号Ctrl+Z组合键生产SIGTSTP信号,停止进程后程序仍然留在内存中,能够从停止的地方继续运行. 捕 ...
- Linux 信号捕捉
pause函数 pause函数挂起调用它的进程,直到有任何消息到达. 调用进程必须有能力处理送达的信号,否则信号的默认部署就会发生. int pause(void); 只有进程捕获到一个信号的时候pa ...
- Linux Shell脚本编程-信号捕获
bash编程的信号捕获: kill -l 显示当前系统可用信号(trap -l) 获取帮助:man 7 single 常用信号: 1) SIGHUP 无须重启进程而让其重读配置文件 2) SI ...
- linux 下信号处理命令trap && linux下各种信号的意义
1.用途说明 trap是一个shell内建命令,它用来在脚本中指定信号如何处理.比如,按Ctrl+C会使脚本终止执行,实际上系统发送了SIGINT信号给脚本进程,SIGINT信号的默认处理方式就是退出 ...
- linux编程之信号
信号(signal)机制是UNIX系统中最为古老的进程之间的通信机制,它用在一个或多个进程之间传递异步信号,信号可以由各种异步事件产生,如: 键盘中断等等,在Linux 的shell 中,也可以使用信 ...
- LINUX SHELL脚本攻略笔记[速查]
Linux Shell脚本攻略笔记[速查] 资源 shell script run shell script echo printf 环境变量和变量 pgrep shell数学运算 命令状态 文件描述 ...
随机推荐
- leetcode[60] Rotate List
题目:给定链表,和一个k,把链表的后k个旋转到前头,例如链表为: 1->2->3->4->5->NULL and k = 2, return 4->5->1- ...
- 02.零成本实现WEB性能测试-基于APACHE JMETER
书评: 1.这本是介绍性能测试工具Jmeter的书籍,维度还够,但是粒度太粗. 2.对于想快速了解JMeter的使用和工具的原件使用,还是有一定的参考价值. 3.实际上,这本书可用来快速入门,掌握和了 ...
- html5 canvas+js实现ps钢笔抠图
html5 canvas+js实现ps钢笔抠图 1. 项目要求需要用js实现photoshop中钢笔抠图功能,就用了近三四天的时间去解决它,最终还是基本上把他实现了. 做的过程中走了不少弯路,最终一同 ...
- OpenGl绘制螺旋线
/** * 缓冲区工具类 */public class BufferUtil { /** * 将浮点数组转换成字节缓冲区 */ public static ByteBuffer arr2ByteB ...
- ASP.NET MVC 5项目
图文详解远程部署ASP.NET MVC 5项目 话外篇: 由于感觉自己的机器比较慢,配置不好,所以最近想把之前的项目部署到实验室的服务器上,但是由于常不在实验室,所以在想能不能远程部署.因此今天专 ...
- 玩转python之测试一个对象是否是类字符串
提到类型测试,我首先想到python中“鸭子类型”的特点,所谓鸭子类型,即如果它走路像鸭子,叫声也像鸭子, 那么对于我们的应用而言,就可以认为它是鸭子了!这一切都是为了功能复用. 我们总是需要测试一个 ...
- CLR基础之一---认识CLR [《CLR via C#》读书笔记]
<CLR via C#>读书笔记 什么是CLR CLR的基本概念 通用语言运行平台(Common Language Runtime,简称CLR)是微软为他们的.Net虚拟机所选用的名称.这 ...
- (转)poj1182食物链
这题主要是看了http://blog.csdn.net/c0de4fun/article/details/7318642这篇解题报告,所以内容基本是转的!感谢大牛这么详细的把过程写的很清楚! 这道题目 ...
- hone hone clock人体时钟
hone hone clock是个十分有趣的人体时钟,这个时钟代码分两种一种是背景透明的,一种 是白色背景的,把你喜欢的代码添加到你的网页中适当位置即可.两种代码如下: <script char ...
- 如何简单而优雅地升级Visual NMP中的PHP版本
需求:自己想测试下不同版本的PHP性能,就想升级下 Visual 这个集成环境中PHP的版本 网上: 升级PHP到5.6.11 1.下载新的nts版的PHP并解压缩到bin\PHP下,保留原文件夹的名 ...