Linux信号发送与作业控制

前言

Linux中进程间通信又称为IPC(Inter process communication),大致上可以分为这么几类:消息队列(message queue),旗语(semerpore),共享内存(shared memory),信号(signal),Unix域套接字,socket等。

一、信号发送

signal用来向进程传递微小的信息。

显示可用信号:

kill -l
man 7 signal

1.kill命令

格式:

kill [-SIGNAL] PID

SIGNAL:

  • (1) 信号的完整名称,例如SIGHUP、SIGINT、SIGKILL、SIGTERM、SIGCONT、SIGSTOP
  • (2) 信号简称:HUP、KILL
  • (3) 信号数据标识:1,2, ...
  • SIGHUP:1, 让进程重读配置文件中的信息,而无须重启进程;
  • SIGINT:2, interrupt,打断正在运行中进程;相当于Ctrl+c
  • SIGKILL: 9, 强行中止正在运行的进程
  • SIGTERM:15, 优雅关闭正在运行的进程 SIGSTOP:19, 暂停进程
  • SIGCONT: 18,继续暂停进程

实例:

[[email protected] ~]# ps aux|grep httpd  
root      56893  1.0  0.1 226128  5056 ?        Ss   21:47   0:00 /usr/sbin/httpd -DFOREGROUND
apache    56894  0.0  0.1 228212  3120 ?        S    21:47   0:00 /usr/sbin/httpd -DFOREGROUND
apache    56895  0.0  0.1 228212  3120 ?        S    21:47   0:00 /usr/sbin/httpd -DFOREGROUND
apache    56896  0.0  0.1 228212  3120 ?        S    21:47   0:00 /usr/sbin/httpd -DFOREGROUND
apache    56897  0.0  0.1 228212  3120 ?        S    21:47   0:00 /usr/sbin/httpd -DFOREGROUND
apache    56898  0.0  0.1 228212  3120 ?        S    21:47   0:00 /usr/sbin/httpd -DFOREGROUND
root      56966  0.0  0.0 112644   948 pts/0    R+   21:47   0:00 grep --color=auto httpd
[[email protected] ~]# kill -1 56893 #让httpd重读其配置文件

2.killall命令

按命令名字发送信号。

格式:

killall [-SIGNAL] COMMAND

实例:

[[email protected] ~]# killall -15 httpd
[[email protected] ~]# ps aux|grep httpd
root      61513  0.0  0.0 112644   952 pts/0    R+   21:55   0:00 grep --color=auto httpd
[[email protected] ~]#

3.pkill命令

pkill 和killall 应用方法差不多,也是直接杀死运行中的程序;如果您想杀掉单个进程,请用kill 来杀掉。

格式:

pkill [options] pattern

常用选项:

-SIGNAL
-u uid: effective user,生效者
-U uid: real user,真正发起运行命令者
-t terminal: 与指定终端相关的进程
-P pid: 显示父进程为此处指定的进程的进程列表

实例:

[[email protected] ~]# pkill httpd

[[email protected] ~]# pkill -U apache

二、Linux作业控制

1.系统job作业

(1)job种类:

  • 前台作业(foregroud):通过终端启动,且启动后会一直占据终端;
  • 后台作业(backgroud):可以通过终端启动,但启动后即转入后台运行(释放终端);

(2)让作业运行于后台

1) 运行中的作业:Ctrl+z

送往后台后,作业会转为停止态;相当于发送kill -19 信号

2) 尚未启动的作业: # COMMAND &

此类作业虽然被送往后台,但其依然与终端相关;如果希望把送往后台的作业剥离与终端的关系:# nohup COMMAND &

实例:

[[email protected] ~]# nohup yes &
[1] 8444
[[email protected] ~]# nohup: ignoring input and appending output to `nohup.out‘

(3)查看所有的作业:#jobs命令

实例:

[[email protected] ~]# jobs -l  # -l选项显示进程PID
[1]+ 23602 Running                 nohup yes &

+/- 表示优先级;当调用时不加作业号会默认调用+的命令

[[email protected] ~]# jobs -l
[1]  79973 Running                 sleep 100 &
[2]  80066 Running                 sleep 200 &
[3]- 80255 Running                 sleep 300 &
[4]+ 80414 Running                 sleep 400 &
[[email protected] ~]# fg
sleep 400

(4)可实现作业控制的常用命令:

  #fg  [[%]JOB_NUM]:把指定的作业调回前台;

  #bg  [[%]JOB_NUM]:让送往后台的作业在后台继续运行;

  #kill  %JOB_NUM:终止指定的作业;

实例:

[[email protected] ~]# sleep 100 &
[1] 72535
[[email protected] ~]# fg 1
sleep 100
^Z     #crtl+z放到后台挂起
[1]+  Stopped                 sleep 100
[[email protected] ~]# jobs -l
[1]+ 72535 Stopped                 sleep 100
[[email protected] ~]# bg %1
[1]+ sleep 100 &
[[email protected] ~]# jobs
[1]+  Running                 sleep 100 &
[[email protected] ~]# kill %1
[[email protected] ~]# jobs
[1]+  Terminated              sleep 100

小贴士:同时运行多个进程方法(提高效率)

        1)vi all.sh
            f1.sh&
            f2.sh&
            f3.sh&
        2)(f1.sh&);(f2.sh&);(f3.sh&)
        3){ f1.sh& f2.sh& f3.sh& }

三、进程优先级调整:nice, renice

静态优先级:

  • 100-139
  • 进程默认启动时的nice值为0,优先级为120
  • 只有root用户才能降低nice值(提高优先性),普通用户只能提高自己的nice值(降低优先级)
  • 一般使用者仅可调整自己程序的 Nice 值,且范围仅为 0 ~ 19 (避免一般用户抢占系统资源);

nice调整范围: -20, 19

注:值越低优先级越高

(1) 以指定的nice值启动一个进程:

nice -n # COMMAND

实例:

[[email protected] ~]# nice -n -16 top&
[[email protected] ~]# ps axo ni,comm|grep top
-16 top

(2) 调整运行中的进程的nice值:

renice -n # PID

实例:

[[email protected] ~]# renice -n 10 89822
89822 (process ID) old priority -16, new priority 10
[[email protected] ~]# ps axo ni,comm|grep top
 10 top

注意:普通用户仅有权限调大nice值;

时间: 2024-10-05 04:49:03

Linux信号发送与作业控制的相关文章

LINUX信号发送

测试环境:ubuntu 16.0 编译器:       g++ (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609 (查看版本指令:g++ --version) 实验目的: 使用int kill(pid_t pid, int sig); 函数发送信号 实验步骤:子进程发送信号,父进程接收子进程发送的信号进行处理 以下为测试代码: 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include &l

linux 编程 linux 信号发送(通过man获取详细介绍)

操作信号集: sigemptyset sigaddset 绑定信号处理函数: signal sigaction 屏蔽: sigprocmask 发送: sigqueue kill 获取: sigpending

Linux信号、信号处理和信号处理函数

信号(signal)是一种软件中断,它提供了一种处理异步事件的方法,也是进程间惟一的异步通信方式.在Linux系统中,根据POSIX标准扩展以后的信号机制,不仅可以用来通知某种程序发生了什么事件,还可以给进程传递数据. 一.信号的来源 信号的来源可以有很多种试,按照产生条件的不同可以分为硬件和软件两种. 1.  硬件方式 当用户在终端上按下某键时,将产生信号.如按下组合键后将产生一个SIGINT信号. 硬件异常产生信号:除数据.无效的存储访问等.这些事件通常由硬件(如:CPU)检测到,并将其通知

Linux 信号signal处理机制(ZZ)

http://www.cnblogs.com/taobataoma/archive/2007/08/30/875743.html 信号是Linux编程中非常重要的部分,本文将详细介绍信号机制的基本概念.Linux对信号机制的大致实现方法.如何使用信号,以及有关信号的几个系统调用. 信号机制是进程之间相互传递消息的一种方法,信号全称为软中断信号,也有人称作软中断.从它的命名可以看出,它的实质和使用很象中断.所以,信号可以说是进程控制的一部分. 一.信号的基本概念 本节先介绍信号的一些基本概念,然后

LINUX 信号概念详解

LINUX 信号概念详解 我们运行如下命令,可看到Linux支持的信号列表: # kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM 17) SIGCHLD 18) SIGCONT 19) SIGSTOP

Linux信号列表

我们运行如下命令,可看到Linux支持的信号列表:~$ kill -l1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR213) SIGPIPE 14) SIGALRM 15) SIGTERM 17) SIGCHLD18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) S

Linux信号(signal) 机制分析

[摘要]本文分析了Linux内核对于信号的实现机制和应用层的相关处理.首先介绍了软中断信号的本质及信号的两种不同分类方法尤其是不可靠信号的原理.接着分析了内核对于信号的处理流程包括信号的触发/注册/执行及注销等.最后介绍了应用层的相关处理,主要包括信号处理函数的安装.信号的发送.屏蔽阻塞等,最后给了几个简单的应用实例. [关键字]软中断信号,signal,sigaction,kill,sigqueue,settimer,sigmask,sigprocmask,sigset_t 1       信

Linux信号详解

Linux信号详解 一 信号的种类 可靠信号与不可靠信号, 实时信号与非实时信号 可靠信号就是实时信号, 那些从UNIX系统继承过来的信号都是非可靠信号, 表现在信号 不支持排队,信号可能会丢失, 比如发送多次相同的信号, 进程只能收到一次. 信号值小于 SIGRTMIN的都是非可靠信号. 非可靠信号就是非实时信号, 后来, Linux改进了信号机制, 增加了32种新的信号, 这些信 号都是可靠信号, 表现在信号支持排队, 不会丢失, 发多少次, 就可以收到多少次. 信号值 位于 [SIGRTM

Linux 信号signal处理机制

信号是Linux编程中非常重要的部分,本文将详细介绍信号机制的基本概念.Linux对信号机制的大致实现方法.如何使用信号,以及有关信号的几个系统调用. 信号机制是进程之间相互传递消息的一种方法,信号全称为软中断信号,也有人称作软中断.从它的命名可以看出,它的实质和使用很象中断.所以,信号可以说是进程控制的一部分. 一.信号的基本概念 本节先介绍信号的一些基本概念,然后给出一些基本的信号类型和信号对应的事件.基本概念对于理解和使用信号,对于理解信号机制都特别重要.下面就来看看什么是信号. 1.基本