kill 命令
kill 命令用于向进程发送控制信号,以实现对进程管理
每个信号对应一个数字,信号名称以 SIG 开头(可省略),不区分大小写。显示当前系统可用的信号可以使用:
[root@CentOS7 ~]# 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 16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8 43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 63) SIGRTMAX-1 64) SIGRTMAX [root@CentOS7 ~]# trap -l #trap -l也可以查看可用信号
常用信号:
1) SIGHUP: 无须关闭进程而让其重读配置文件2) SIGINT: 中止正在运行的进程;相当于Ctrl+c
3) SIGQUIT:相当于ctrl+\
9) SIGKILL: 强制杀死正在运行的进程
15) SIGTERM:终止正在运行的进程
18) SIGCONT:继续运行
19) SIGSTOP:后台休眠
指定信号的方法:
(1) 信号的数字标识:1, 2, 9(2) 信号完整名称:SIGHUP
(3) 信号的简写名称:HUP
指定进程的方法:
按PID:kill [-SIGNAL] pid
[root@CentOS7 cd]# kill 5454 [root@CentOS7 ~]# sleep 100 #默认kill命令回向进程发送15)SIGTERM信号 Terminated
按名称:killall [-SIGNAL] comm
[root@CentOS7 cd]# killall -9 sleep #强制杀死名为sleep的进程 [root@CentOS7 ~]# sleep 100 Killed
对于再生进程而言,无法杀死。但是对于其父进程发送 SIGKILL 信号后可以杀死。
按模式:pkill [选项] 模式
[root@CentOS7 cd]# w 22:47:51 up 6:02, 2 users, load average: 0.00, 0.01, 0.05 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root pts/0 192.168.30.1 16:45 7.00s 0.24s 0.00s w root pts/1 192.168.30.1 16:45 7.00s 0.29s 0.02s vim [root@CentOS7 cd]# pkill -t pts/1 #向pts/1终端发送15信号 [root@CentOS7 cd]# w #pts/1终端上的进程被终止,无法终止bash。信号9可以终止bash 22:48:20 up 6:03, 2 users, load average: 0.00, 0.01, 0.05 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root pts/0 192.168.30.1 16:45 4.00s 0.24s 0.00s w root pts/1 192.168.30.1 16:45 36.00s 0.27s 0.27s -bash
选项:
-u uid: effective user,生效者
-U uid: real user,真正发起运行命令者
-t terminal: 与指定终端相关的进程
-P pid: 显示指定进程的子进程
作业控制
用户交个计算机的工作称为作业;
作业由程序、数据、作业说明3部分组成;
我们接触的操作系统作业分为:批处理作业和交互式作业;脱机是批处理作业的主要特征。脱机的意思是不由人再操作。交互式作业以联机为主要特征。
前台作业:通过终端启动,且启动后一直占据终端;
后台作业:可通过终端启动,但启动后即转入后台运行(释放终端)
让作业运行于后台
(1) 运行中的作业: Ctrl+z(2) 尚未启动的作业: COMMAND &
查看当前终端所有作业:jobs
[root@CentOS7 cd]# jobs [2]+ Stopped ping 192.168.30.3
fg [%]工作号:把指定的后台作业调回前台
bg [%]工作号:让送往后台的作业在后台继续运行
kill [信号] %工作号: 终止指定的作业
后台作业虽然被送往后台运行,但其依然与终端相关;退出终端,将关闭后台作业。如果希望送往后台后,剥离与终端的关系可以使用:
nohup COMMAND &
多进程并行运行的方法
方法1
将所有需要运行的进程以后台运行模式写入脚本,然后运行脚本。
方法2
使用小括号将进程分别放入子bash中后台运行。
方法3
将所有进程放入花括号中,以后台模式运行。
任务管理
为了保证计划任务执行的同步性,在配置计划任务之前,必须保证主机间的时间同步。
1、使用 ntpdate 命令将时间向服务器进行同步
2、修改配置文件 /etc/chrony.conf(CentOS7) 添加 /etc/ntp.conf(CentOS6)
server 172.20.0.1 iburst
3、使用 clock -w 将硬件时间向软件时间同步。
4、CentOS6启动 ntpd 服务
[root@CentOS6 ~]# service ntpd start Starting ntpd: [ OK ] [root@CentOS6 ~]# chkconfig ntpd on
CentOS7启动 chronyd 服务
[root@CentOS7 cd]# systemctl enable chronyd.service Created symlink from /etc/systemd/system/multi-user.target.wants/chronyd.service to /usr/lib/systemd/system/chronyd.service.
at 命令用于计划未来的某以时间的单次任务,任务队列存放在/var/spool/at目录中。
在使用 at 之前确定服务已开启
[root@CentOS7 cd]# systemctl status atd.service ● atd.service - Job spooling tools Loaded: loaded (/usr/lib/systemd/system/atd.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2018-05-08 16:45:37 CST; 6h ago Main PID: 1137 (atd) CGroup: /system.slice/atd.service └─1137 /usr/sbin/atd -f May 08 16:45:37 CentOS7.miriam systemd[1]: Started Job spooling tools. May 08 16:45:37 CentOS7.miriam systemd[1]: Starting Job spooling tools...
语法:at [选项] 时间
[root@CentOS7 cd]# at now+1minutes at> wall ahhaha<EOT> job 2 at Tue May 8 16:11:00 2018 [root@CentOS7 cd]# at now+1minutes Broadcast message from [email protected] (Tue May 8 16:11:00 2018): ahhaha
选项:
-l: 列出指定队列中等待运行的作业;相当于atq
-d: 删除指定的作业;相当于atrm
-c: 查看具体作业任务
-f /path/from/somefile:从指定的文件中读取任务
-m:当任务被完成之后,将给用户发送邮件,即使没有标准输出
时间:
HH:MM [YYYY-mm-dd]
noon, midnight, teatime(4pm),tomorrow
now+#{minutes,hours,days, OR weeks}
白名单:/etc/at.allow 默认不存在,只有该文件中的用户才能执行at命令
黑名单:/etc/at.deny 默认存在,拒绝该文件中用户执行at命令,而没有在at.deny 文件中的使用者则可执行
如果两个文件都不存在,只有 root 可以执行 at 命令,当有 at.allow 存在时,at.deny 不起作用。
cron 命令用于创建周期性的计划任务。cron的日志存放在 /var/log/cron
首先还是查看服务是否启动
[root@CentOS7 cd]# systemctl status crond ● crond.service - Command Scheduler Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2018-05-08 16:45:37 CST; 25min left Main PID: 1138 (crond) CGroup: /system.slice/crond.service └─1138 /usr/sbin/crond -n May 08 16:45:37 CentOS7.miriam systemd[1]: Started Command Scheduler. May 08 16:45:37 CentOS7.miriam systemd[1]: Starting Command Scheduler... May 08 16:45:37 CentOS7.miriam crond[1138]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 72% if used.) May 08 16:45:37 CentOS7.miriam crond[1138]: (CRON) INFO (running with inotify support)
添加计划任务
系统cron任务:
etc/crontab
/etc/cron.hourly/ 脚本
/etc/cron.daily/ 脚本
/etc/cron.weekly/ 脚本
/etc/cron.monthly/ 脚本
[root@CentOS7 cd]# cat /etc/crontab SHELL=/bin/bash #使用shell类型 PATH=/sbin:/bin:/usr/sbin:/usr/bin #PATH变量 MAILTO=root #邮件接收者 # For details see man 4 crontabs # Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * user-name command to be executed
时间格式:
(1) 特定值 @reboot 下一次开机
给定时间点有效取值范围内的值 @yearly 0 0 1 1 *
(2) 任意值 @monthly 0 0 1 * *
给定时间点上有效取值范围内的所有值 @annually 0 0 1 1 *
(3) 离散值 @weekly 0 0 * * 0
#,#,# @daily 0 0 * * *
(4) 连续值 @hourly 0 * * * *
#-#
(5) 步进值
/#:#即为步长
当日期与星期同时指定时,关系为或