首页 > 代码库 > Linux信号发送与作业控制
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,继续暂停进程
实例:
[root@young ~]# 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 [root@young ~]# kill -1 56893 #让httpd重读其配置文件
2.killall命令
按命令名字发送信号。
格式:
killall [-SIGNAL] COMMAND
实例:
[root@young ~]# killall -15 httpd [root@young ~]# ps aux|grep httpd root 61513 0.0 0.0 112644 952 pts/0 R+ 21:55 0:00 grep --color=auto httpd [root@young ~]#
3.pkill命令
pkill 和killall 应用方法差不多,也是直接杀死运行中的程序;如果您想杀掉单个进程,请用kill 来杀掉。
格式:
pkill [options] pattern
常用选项:
-SIGNAL -u uid: effective user,生效者 -U uid: real user,真正发起运行命令者 -t terminal: 与指定终端相关的进程 -P pid: 显示父进程为此处指定的进程的进程列表
实例:
[root@young ~]# pkill httpd [root@CentOS ~]# pkill -U apache
二、Linux作业控制
1.系统job作业
(1)job种类:
前台作业(foregroud):通过终端启动,且启动后会一直占据终端;
后台作业(backgroud):可以通过终端启动,但启动后即转入后台运行(释放终端);
(2)让作业运行于后台
1) 运行中的作业:Ctrl+z
送往后台后,作业会转为停止态;相当于发送kill -19
信号
2) 尚未启动的作业: # COMMAND &
此类作业虽然被送往后台,但其依然与终端相关;如果希望把送往后台的作业剥离与终端的关系:# nohup COMMAND &
实例:
[root@CentOS ~]# nohup yes & [1] 8444 [root@CentOS ~]# nohup: ignoring input and appending output to `nohup.out‘
(3)查看所有的作业:#jobs
命令
实例:
[root@young ~]# jobs -l # -l选项显示进程PID [1]+ 23602 Running nohup yes &
+/- 表示优先级;当调用时不加作业号会默认调用+的命令
[root@young ~]# jobs -l [1] 79973 Running sleep 100 & [2] 80066 Running sleep 200 & [3]- 80255 Running sleep 300 & [4]+ 80414 Running sleep 400 & [root@young ~]# fg sleep 400
(4)可实现作业控制的常用命令:
#fg [[%]JOB_NUM]:把指定的作业调回前台; #bg [[%]JOB_NUM]:让送往后台的作业在后台继续运行; #kill %JOB_NUM:终止指定的作业;
实例:
[root@young ~]# sleep 100 & [1] 72535 [root@young ~]# fg 1 sleep 100 ^Z #crtl+z放到后台挂起 [1]+ Stopped sleep 100 [root@young ~]# jobs -l [1]+ 72535 Stopped sleep 100 [root@young ~]# bg %1 [1]+ sleep 100 & [root@young ~]# jobs [1]+ Running sleep 100 & [root@young ~]# kill %1 [root@young ~]# 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
实例:
[root@young ~]# nice -n -16 top& [root@young ~]# ps axo ni,comm|grep top -16 top
(2) 调整运行中的进程的nice值:
renice -n # PID
实例:
[root@young ~]# renice -n 10 89822 89822 (process ID) old priority -16, new priority 10 [root@young ~]# ps axo ni,comm|grep top 10 top
注意:普通用户仅有权限调大nice值;
本文出自 “追求不完美” 博客,请务必保留此出处http://yolynn.blog.51cto.com/11575833/1898658
Linux信号发送与作业控制