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控制脚本:信号捕捉,作业控制,调整谦让度,以及计划任务的更多相关文章

  1. Linux系统编程—信号捕捉

    前面我们学习了信号产生的几种方式,而对于信号的处理有如下几种方式: 默认处理方式: 忽略: 捕捉. 信号的捕捉,说白了就是抓到一个信号后,执行我们指定的函数,或者执行我们指定的动作.下面详细介绍两个信 ...

  2. 《Linux命令行与shell脚本编程大全》第十六章 控制脚本

    一些控制脚本的方式:向脚本发送信号.修改脚本优先级,在脚本运行时切换到运行模式 16.1 处理信号 linux利用信号与运行在系统中的进程进行通信. 也可以通过对脚本进行编程,使其在收到特定信号时执行 ...

  3. linux中脚本扑捉(trap)信号问题

    扑捉ctrl+c信号: #!/bin/bash trap ; function trap() { echo "You press Ctrl+C."; echo "Exit ...

  4. Linux&shell之如何控制脚本

    写在前面:案例.常用.归类.解释说明.(By Jim) Ctrl+C组合键可以生产SIGINT信号Ctrl+Z组合键生产SIGTSTP信号,停止进程后程序仍然留在内存中,能够从停止的地方继续运行. 捕 ...

  5. Linux 信号捕捉

    pause函数 pause函数挂起调用它的进程,直到有任何消息到达. 调用进程必须有能力处理送达的信号,否则信号的默认部署就会发生. int pause(void); 只有进程捕获到一个信号的时候pa ...

  6. Linux Shell脚本编程-信号捕获

    bash编程的信号捕获:  kill -l 显示当前系统可用信号(trap -l)  获取帮助:man 7 single 常用信号: 1) SIGHUP  无须重启进程而让其重读配置文件  2) SI ...

  7. linux 下信号处理命令trap && linux下各种信号的意义

    1.用途说明 trap是一个shell内建命令,它用来在脚本中指定信号如何处理.比如,按Ctrl+C会使脚本终止执行,实际上系统发送了SIGINT信号给脚本进程,SIGINT信号的默认处理方式就是退出 ...

  8. linux编程之信号

    信号(signal)机制是UNIX系统中最为古老的进程之间的通信机制,它用在一个或多个进程之间传递异步信号,信号可以由各种异步事件产生,如: 键盘中断等等,在Linux 的shell 中,也可以使用信 ...

  9. LINUX SHELL脚本攻略笔记[速查]

    Linux Shell脚本攻略笔记[速查] 资源 shell script run shell script echo printf 环境变量和变量 pgrep shell数学运算 命令状态 文件描述 ...

随机推荐

  1. C# 利用 HttpWebRequest 和 HttpWebResponse 模拟登录有验证码的网站

    原文:C# 利用 HttpWebRequest 和 HttpWebResponse 模拟登录有验证码的网站 我们经常会碰到需要程序模拟登录一个网站,那如果网站需要填写验证码的要怎样模拟登录呢?这篇文章 ...

  2. 九度OJ 1035:找出直系亲属(二叉树)

    题目1035:找出直系亲属 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1309 解决:521 题目描述: 如果A,B是C的父母亲,则A,B是C的parent,C是A,B的child,如 ...

  3. 阿里云WinServer2008下配置IIS7支持php

    先送一只法克鱿给百度,百度了n多的方法都或多或少有问题. 0.php安装包 php-5.2.1-Win32.zip 下载地址 http://pan.baidu.com/s/1pJuc8YZ 最开始是p ...

  4. Mock原理学习

    同事搓蛋问了我一个问题,mock的原理是啥,没怎么想出来,于是花了点时间学习了一下. 从Moq这个库入手:https://github.com/moq/moq4 Moq用到了Castle的库用于Dyn ...

  5. NET框架SOA解决方案(集Windows服务、WinForm形式与IIS形式发布)-分布式应用

    NET框架SOA解决方案(集Windows服务.WinForm形式与IIS形式发布)-分布式应用 RDIFramework.NET,基于.NET的快速信息化系统开发.整合框架,给用户和开发者最佳的.N ...

  6. SignalR + KnockoutJS + ASP.NET MVC 实现井字游戏

    SignalR + KnockoutJS + ASP.NET MVC 实现井字游戏   1.1.1 摘要 今天,我们将使用SignalR + KnockoutJS + ASP.NET MVC实现一个实 ...

  7. 在 Ubuntu 12.04 上通过 Tomcat 部署 Solr 4

    http://www.oschina.net/question/12_71342 可行

  8. 够快网盘支持与iOS-ASIHTTPRequest框架学习

    够快网盘支持与iOS-ASIHTTPRequest框架学习 前段时间在公司的产品中支持了够快网盘,用于云盘存储. 在这个过程中,学习到了很多新的知识,也遇到了很多问题,在此记录一下. 首先就够快的AP ...

  9. 企业架构研究总结(40)——TOGAF架构能力框架之架构合同、成熟度模型和架构技能框架

    5. 架构合同 架构合同是在开发团体和赞助者之间关于架构的交付物.质量以及适用目标的联合协议,并且通过有效的架构治理将会促使这些协议的成功施行.通过对合同的管理施行一个治理方法,如下几点将会得到保障: ...

  10. .NET 微信开放平台接口(接收短信、发送短信)

    .NET 微信开放平台接口(接收短信.发送短信) 前两天做个项目用到了微信api功能.项目完成后经过整理封装如下微信操作类. 以下功能的实现需要开发者已有微信的公众平台账号,并且开发模式已开启.接口配 ...