fg、bg、jobs、&、ctrl + z命令
一、 &
加在一个命令的最后,可以把这个命令放到后台执行 ,如gftp &,
二、ctrl + z
可以将一个正在前台执行的命令放到后台,并且处于暂停状态,不可执行
三、jobs
查看当前有多少在后台运行的命令
jobs
-l选项可显示所有任务的PID,jobs的状态可以是running, stopped,
Terminated,但是如果任务被终止了(kill),shell
从当前的shell环境已知的列表中删除任务的进程标识;也就是说,jobs命令显示的是当前shell环境中所起的后台正在运行或者被挂起的任务信息;
四、fg
将后台中的命令调至前台继续运行
如果后台中有多个命令,可以用 fg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)
五、bg
将一个在后台暂停的命令,变成继续执行 (在后台执行)
如果后台中有多个命令,可以用bg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)
将任务转移到后台运行:
先ctrl + z;再bg,这样进程就被移到后台运行,终端还能继续接受命令。
概念:当前任务
如果后台的任务号有2个,[1],[2];如果当第一个后台任务顺利执行完毕,第二个后台任务还在执行中时,当前任务便会自动变成后台任务号码“[2]” 的后台任务。所以可以得出一点,即当前任务是会变动的。当用户输入“fg”、“bg”和“stop”等命令时,如果不加任何引号,则所变动的均是当前任务进程的终止。
后台进程的终止:
方法一:
通过jobs命令查看job号(假设为num),然后执行kill %num
方法二:
通过ps命令查看job的进程号(PID,假设为pid),然后执行kill pid
前台进程的终止:
ctrl+c
kill的其他作用
kill除了可以终止进程,还能给进程发送其它信号,使用kill -l 可以察看kill支持的信号。
SIGTERM是不带参数时kill发送的信号,意思是要进程终止运行,但执行与否还得看进程是否支持。如果进程还没有终止,可以使用kill -SIGKILL pid,这是由内核来终止进程,进程不能监听这个信号。
进程的挂起
后台进程的挂起:
在solaris中通过stop命令执行,通过jobs命令查看job号(假设为num),然后执行stop %num;
在redhat中,不存在stop命令,可通过执行命令kill -stop PID,将进程挂起;
当要重新执行当前被挂起的任务时,通过bg %num 即可将挂起的job的状态由stopped改为running,仍在后台执行;当需要改为在前台执行时,执行命令fg %num即可;
前台进程的挂起:ctrl+Z;
killall命令使用进程的名称来杀死进程,使用此指令可以杀死一组同名进程。我们可以使用kill命令杀死指定进程PID的进程,如果要找到我们需要杀死的进程,我们还需要在之前使用ps等命令再配合grep来查找进程,而killall把这两个过程合二为一,是一个很好用的命令。
语法
killall(选项)(参数)
选项
-e:对长名称进行精确匹配;
-l:忽略大小写的不同;
-p:杀死进程所属的进程组;
-i:交互式杀死进程,杀死进程前需要进行确认;
-l:打印所有已知信号列表;
-q:如果没有进程被杀死。则不输出任何信息;
-r:使用正规表达式匹配要杀死的进程名称;
-s:用指定的进程号代替默认信号“SIGTERM”;
-u:杀死指定用户的进程。
参数
进程名称:指定要杀死的进程名称。
实例
杀死所有同名进程
killall vi
pkill命令可以按照进程名杀死进程。pkill和killall应用方法差不多,也是直接杀死运行中的程序。如果想杀掉单个进程,请用kill来杀掉。
语法格式:pkill [参数]
常用参数:
-o 仅向找到的最小(起始)进程号发送信号
-n 仅向找到的最大(结束)进程号发送信号
-P 指定父进程号发送信号
-g 指定进程组
-t 指定开启进程的终端
参考实例
仅向找到的最小(起始)进程号发送信号:
[root@linuxcool ~]# pkill -o
仅向找到的最大(结束)进程号发送信号:
[root@linuxcool ~]# pkill -n
杀死Apache进程:
[root@linuxcool ~]# pkill httpd
在Linux中,周期执行的任务一般由cron这个守护进程来处理[ps -ef|grep cron]。cron读取一个或多个配置文件,这些配置文件中包含了命令行及其调用时间。cron的配置文件称为“crontab”,是“cron table”的简写。当安装完成操作系统后,默认会安装此服务 工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。cron可以让系统在指定的时间,去执行某个指定的工作,我们可以使用crontab指令来管理cron机制。
Linux的任务调度机制主要分为两种:
执行一次:将在某个特定的时间执行的任务调度 at
执行多次: crontab
3.关机后恢复尚未执行的程序 anacron
关于at、crontab、anacron的基本使用:https://www.cnblogs.com/Downtime/p/8371838.html
一、cron服务
cron是一个linux下 的定时执行工具,可以在无需人工干预的情况下运行作业。
systemctl start crond //启动服务
systemctl stop crond //关闭服务
systemctl restart crond //重启服务
systemctl reload crond //重新载入配置
systemctl status crond //查看服务状态
crontab -l //查看root用户的crontab任务
crontab -r //删除root用户所有crontab任务
crontab -u //使用者名称
二、cron在3个地方查找配置文件:
1、/var/spool/cron/ 这个目录下存放的是每个用户包括root的crontab任务,每个任务以创建者的名字命名,比如tom建的crontab任务对应的文件就是/var/spool/cron/tom。一般一个用户最多只有一个crontab文件。
2、/etc/crontab 这个文件负责安排由系统管理员制定的维护系统以及其他任务的crontab。cat /etc/crontab结果如下
MAILTO=root:是说,当 /etc/crontab 这个档案中的例行性命令发生错误时,会将错误讯息或者是屏幕显示的讯息传给谁?由于 root 并无法再用户端收信,因此,我通常都將这个 e-mail 改成自己的账号,好让我随时了解系统的状态!
01 * * * * root run-parts /etc/cron.hourly:在 #run-parts 这一行以后的命令,我们可以发现,五个数字后面接的是 root ,这一行代表的是『执行的级别为root身份』当然,你也可以将这一行改为成其他的身份!而 run-parts代表后面接的 /etc/cron.hourly 是『一个目录内(/etc/cron.hourly)的所有可执行文件』,也就是说,每个小时的01分,系统会以root身份去/etc/cron.hourly这个目录下执行所有可执行的文件!后面三行也是类似的意思!你可以到 /etc/ 底下去看看,系统本来就预设了这4个目录!你可以将每天需要执行的命令直接写到/etc/cron.daily即可,还不需要使用到crontab -e的程式!
3、/etc/cron.d/ 这个目录用来存放任何要执行的crontab文件或脚本。
三、cron时间格式说明
crontab范例
每五分钟执行 */5 * * * *
每小时执行 0 * * * *
每天执行 0 0 * * *
每周执行 0 0 * * 0
每月执行 0 0 1 * *
每年执行 0 0 1 1 *
每12小时执行 0 */12 * * * (特别说明 */12中间没有空格,其他每个字符间都有空格,切记,切记,不然格式报错)
四、cron权限
设定cron的权限
/etc/cron.allow
/etc/cron.deny
系统首先判断是否有cron.allow这个文件,如果有这个文件的话,系统会判断这个使用者有没有在cron.allow的名单里面,如果在名单里面的话,就可以使用cron机制。如果这个使用者没有在cron.allow名单里面的话,就不能使用cron机制。
如果系统里面没有cron.allow这个文件的话,系统会再判断是否有cron.deny这个文件,如果有cron.deny这个文件的话,就会判断这个使用者有没有在cron.deny这个名单里面,如果这个使用者在cron.deny名单里面的话,将不能使用cron机制。如果这个使用者没有在cron.deny这个名单里面的话就可以使用cron机制。
crontab权限问题到/var/adm/cron/下一看,文件cron.allow和cron.deny是否存在
用法如下:
1、如果两个文件都不存在,则只有root用户才能使用crontab命令。
2、如果cron.allow存在但cron.deny不存在,则只有列在cron.allow文件里的用户才能使用crontab命令,如果root用户也不在里面,则root用户也不能使用crontab。
3、如果cron.allow不存在, cron.deny存在,则只有列在cron.deny文件里面的用户不能使用crontab命令,其它用户都能使用。
4、如果两个文件都存在,则列在cron.allow文件中而且没有列在cron.deny中的用户可以使用crontab,如果两个文件中都有同一个用户,以cron.allow文件里面是否有该用户为准,如果cron.allow中有该用户,则可以使用crontab命令。
五、创建cron脚本
第一步:写cron脚本文件,命名为crontest.cron。
15,30,45,59 * * * * echo “xgmtest…” >> xgmtest.txt 表示,每隔15分钟,执行打印一次命令
第二步:添加定时任务。执行命令 “crontab crontest.cron”。搞定
第三步:“crontab -l” 查看定时任务是否成功或者检测/var/spool/cron下是否生成对应cron脚本
注意:这操作是直接替换该用户下的crontab,而不是新增
也可以crontab -uroot -e编辑定时执行写好脚本,例如crontab -uroot -e进入编辑页面如下,/root/updatecode.sh为脚本所在位置
六、crontab用法
crontab命令用于安装、删除或者列出用于驱动cron后台进程的表格。用户把需要执行的命令序列放到crontab文件中以获得执行。
每个用户都可以有自己的crontab文件。/var/spool/cron下的crontab文件不可以直接创建或者直接修改。该crontab文件是通过crontab命令创建的
在crontab文件中如何输入需要执行的命令和时间。该文件中每行都包括六个域,其中前五个域是指定命令被执行的时间,最后一个域是要被执行的命令。
每个域之间使用空格或者制表符分隔。格式如下:
minute hour day-of-month month-of-year day-of-week commands
合法值 00-59 00-23 01-31 01-12 0-6 (0 is sunday)
除了数字还有几个个特殊的符号就是"*"、"/“和”-"、",",*代表所有的取值范围内的数字,"/“代表每的意思,”/5"表示每5个单位,"-“代表从某个数字到某个数字,”,"分开几个离散的数字。
-l 在标准输出上显示当前的crontab。
-r 删除当前的crontab文件。
-e 使用VISUAL或者EDITOR环境变量所指的编辑器编辑当前的crontab文件。当结束编辑离开时,编辑后的文件将自动安装。
七、例子:
每天早上6点
0 6 * * * echo “Good morning.” >> /tmp/test.txt //注意单纯echo,从屏幕上看不到任何输出,因为cron把任何输出都email到root的信箱了。
每两个小时 (特别说明 */2中间没有空格,其他每个字符间都有空格,切记,切记,不然格式报错)
0 */2 * * * echo “Have a break now.” >> /tmp/test.txt
晚上11点到早上8点之间每两个小时和早上八点
0 23-7/2,8 * * * echo “Have a good dream” >> /tmp/test.txt
每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点
0 11 4 * 1-3 command line
1月1日早上4点
0 4 1 1 * command line SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root //如果出现错误,或者有数据输出,数据作为邮件发给这个帐号 HOME=/
每小时执行/etc/cron.hourly内的脚本
01 * * * * root run-parts /etc/cron.hourly
每天执行/etc/cron.daily内的脚本
02 4 * * * root run-parts /etc/cron.daily
每星期执行/etc/cron.weekly内的脚本
22 4 * * 0 root run-parts /etc/cron.weekly
每月去执行/etc/cron.monthly内的脚本
42 4 1 * * root run-parts /etc/cron.monthly
注意: "run-parts"这个参数了,如果去掉这个参数的话,后面就可以写要运行的某个脚本名,而不是文件夹名。
每天的下午4点、5点、6点的5 min、15 min、25 min、35 min、45 min、55 min时执行命令。
5,15,25,35,45,55 16,17,18 * * * command
每周一,三,五的下午3:00系统进入维护状态,重新启动系统。
00 15 * * 1,3,5 shutdown -r +5
每小时的10分,40分执行用户目录下的innd/bbslin这个指令:
10,40 * * * * innd/bbslink
每小时的1分执行用户目录下的bin/account这个指令:
1 * * * * bin/account
每天早晨三点二十分执行用户目录下如下所示的两个指令(每个指令以;分隔):
20 3 * * * (/bin/rm -f expire.ls logins.bad;bin/expireKaTeX parse error: Expected 'EOF', got '#' at position 1: #̲@62;expire.1st)…#@62;$#@62;mm.txt
进程一般存在几种状态,
1.运行(R) 正在运行或在运行队列中等待。
2.睡眠(S) ,休眠中, 受阻, 在等待某个条件的形成或接受到信号,
3.僵死(Z),僵死一般是进程结束了,进程描述符还在,等着父进程调wait4.
4.停止(T) 进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行。
5.不可中断(D), 收到信号不唤醒和不可运行, 进程必须等待直到有中断发生。
命令格式
ps [options]
ps常用命令参数及方法
(1)ps aux
可以列出当前系统所有内存当中的程序
root@ubuntu:~# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.7 24996 3624 ? Ss Apr14 0:05 /sbin/init auto noprompt
root 2 0.0 0.0 0 0 ? S Apr14 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S Apr14 0:02 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S< Apr14 0:00 [kworker/0:0H]
root 7 0.0 0.0 0 0 ? S Apr14 0:05 [rcu_sched]
root 8 0.0 0.0 0 0 ? S Apr14 0:00 [rcu_bh]
root 9 0.0 0.0 0 0 ? S Apr14 0:00 [migration/0]
root 10 0.0 0.0 0 0 ? S Apr14 0:00 [watchdog/0]
其中
USER 用户名
UID 用户ID(User ID)
PID 进程ID(Process ID)
PPID 父进程的进程ID(Parent Process id)
SID 会话ID(Session id)
%CPU 进程的cpu占用率
%MEM 进程的内存占用率
VSZ 进程所使用的虚存的大小(Virtual Size)
RSS 进程使用的驻留集大小或者是实际内存的大小,Kbytes字节。
TTY 与进程关联的终端(tty)
STAT 进程的状态:进程状态使用字符表示的(STAT的状态码)
R 运行 Runnable (on run queue) 正在运行或在运行队列中等待。
S 睡眠 Sleeping 休眠中, 受阻, 在等待某个条件的形成或接受到信号。
I 空闲 Idle
Z 僵死 Zombie(a defunct process) 进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放。
D 不可中断 Uninterruptible sleep (ususally IO) 收到信号不唤醒和不可运行, 进程必须等待直到有中断发生。
T 终止 Terminate 进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行。
P 等待交换页
W 无驻留页 has no resident pages 没有足够的记忆体分页可分配。
X 死掉的进程
< 高优先级进程 高优先序的进程
N 低优先 级进程 低优先序的进程
L 内存锁页 Lock 有记忆体分页分配并缩在记忆体内
s 进程的领导者(在它之下有子进程);
l 多进程的(使用 CLONE_THREAD, 类似 NPTL pthreads)
(2)过滤进程
过滤sshd
root@ubuntu:~#
root@ubuntu:~# ps -aux | grep sshd
root 347 0.0 0.3 4540 1932 pts/19 S+ 07:38 0:00 grep --color=auto sshd
root 818 0.0 0.1 10432 924 ? Ss Apr14 0:00 /usr/sbin/sshd -D
root 32269 0.0 0.9 13784 4580 ? Ss 06:12 0:00 sshd: root@pts/19
(3)过滤用户
root@ubuntu:~# ps -aux | grep zhouzh*
root 353 0.0 0.3 4540 2016 pts/19 S+ 07:39 0:00 grep --color=auto zhouzh*
zhouzhe+ 1070 0.0 0.4 6320 2292 ? Ss Apr14 0:00 /lib/systemd/systemd --user
zhouzhe+ 1071 0.0 0.0 7520 12 ? S Apr14 0:00 (sd-pam)
zhouzhe+ 1103 0.0 0.7 48384 3688 ? Sl Apr14 0:00 /usr/bin/gnome-keyring-daemon --daemonize --login
zhouzhe+ 1105 0.0 0.4 7788 2388 ? Ss Apr14 0:00 /sbin/upstart --user
zhouzhe+ 1197 0.0 0.5 6740 2544 ? Ss Apr14 0:02 dbus-daemon --fork --session --address=unix:abstract=/tmp/dbus-OXyJ7Skafh
zhouzhe+ 1198 0.0 0.0 6812 20 ? S Apr14 0:00 upstart-udev-bridge --daemon --user
(4)另外结合kill使用,通过ps查询进程pid等,然后用kill命令杀死进程
绝杀进程,包括其子进程
kill -9 -pid
pid为进程号
也可以
killall 进程名
先使用ps -ef | grep 进程号
查看有没有父进程(PPID表示父进程),和子进程
再一个一个的把子进程和父进程都杀掉
kill -pid
init进程为1
kill -9 -1 相当于关闭系统
Linux系统中pstree命令的英文全称是“process tree”,即将所有行程以树状图显示,树状图将会以 pid (如果有指定) 或是以 init 这个基本行程为根 (root),如果有指定使用者 id,则树状图会只显示该使用者所拥有的行程。
语法格式: pstree [参数]
常用参数:
-a 显示每个程序的完整指令,包含路径,参数或是常驻服务的标示
-c 不使用精简标示法
-G 使用VT100终端机的列绘图字符
-h 列出树状图时,特别标明现在执行的程序
参考实例
显示当前所有进程的进程号和进程id:
[root@linuxcool ~]# pstree -p
显示所有进程的所有详细信息,遇到相同的进程名可以压缩显示:
[root@linuxcool ~]# pstree -a
1、一开始执行程序就指定nice值:nice
nice -n -5 /usr/local/mysql/bin/mysqld_safe &
linux nice 命令详解
功能说明:设置优先权。
语 法:nice [-n <优先等级>][–help][–version][执行指令]
补充说明:nice指令可以改变程序执行的优先权等级。
参 数:-n<优先等级>或-<优先等级>或–adjustment=<优先等级> 设置欲执行的指令的优先权等级。等级的范围从-20-19,其中-20最高,19最低,只有系统管理者可以设置负数的等级。
–help 在线帮助。
–version 显示版本信息。
2.调整已存在进程的nice:renice
renice -5 -p 5200
#PID为5200的进程nice设为-5
linux renice 命令详解
功能说明:调整优先权。
语 法:renice [优先等级][-g <程序群组名称>…][-p <程序识别码>…][-u <用户名称>…]
补充说明:renice指令可重新调整程序执行的优先权等级。预设是以程序识别码指定程序调整其优先权,您亦可以指定程序群组或用户名称调整优先权等级, 并修改所有隶属于该程序群组或用户的程序的优先权。等级范围从-20–19,只有系统管理者可以改变其他用户程序的优先权,也仅有系统管理者可以设置负数 等级。
参 数:
-g <程序群组名称> 使用程序群组名称,修改所有隶属于该程序群组的程序的优先权。
-p <程序识别码> 改变该程序的优先权等级,此参数为预设值。
-u <用户名称> 指定用户名称,修改所有隶属于该用户的程序的优先权。
也可以用top命令更改已存在进程的nice:
top
#进入top后按“r”–>输入进程PID–>输入nice值
nohup命令可以将程序以忽略挂起信号的方式运行起来,被运行的程序的输出信息将不会显示到终端。
无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中。如果当前目录的 nohup.out 文件不可写,输出重定向到$HOME/nohup.out文件中。如果没有文件能创建或打开以用于追加,那么 command 参数指定的命令不可调用。如果标准错误是一个终端,那么把指定的命令写给标准错误的所有输出作为标准输出重定向到相同的文件描述符。
语法
nohup(选项)(参数)
选项
–help:在线帮助;
–version:显示版本信息。
参数
程序及选项:要运行的程序及选项。
实例
使用nohup命令提交作业,如果使用nohup命令提交作业,那么在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中,除非另外指定了输出文件:
nohup command > myout.file 2>&1 &
作用:pgrep命令用于查找当前运行的进程,并列出匹配给定条件的进程的PID。所有的条件都必须匹配才会被列出。
用法:pgrep[选项][程序名]
主要选项如下。
-l:列出程序名和进程ID。
-o:进程起始的ID。
-n:进程终止的ID。
应用实例如下。
用户cao查看sshd的进程列表:
[cao@localhost@cao]$pgrep -l sshd
829 sshd
shell, 命令
【runlevel】查看操作系统运行级别
[root@gdy ~]# runlevel
N 3
启动的服务不同:
运行级别:0-6
0:halt表示关机
1:single user mode单用户模式,直接以管理员身份切入。相当于windows的安全模式(s,S,single)都可以表示该级别
2:multi user mode,no NFS 多用户模式,启动后由网络功能,但启动后不启动网络文件系统挂载。即no NFS
3:multi user mode,text mode 正常命令行输入模式(通常用到的)
4:reserved保留级别,没有定义
5:multi user mode,graphic mode 图形界面模式
6:reboot表示重启
0 关机 3 字符界面 5 图形化界面 6 重启用的比较多
0:几乎所有进程都关闭,停机状态
1:单用户模式,root账户进行操作
2:多用户,不能使用net file system,一般很少用
3:完全多用户,一部分启动,一部分不启动,命令行界面
4:未使用、未定义的保留模式
5:图形化,3级别中启动的进程都启动,并且会启动一部分图形界面进程。
6:停止所有进程,卸载文件系统,重新启动
如果把默认运行级别设为了6,会陷入无限重启中。需要进入单用户模式修改默认运行级别。
本文主要是讲解service命令的功能与日常使用方法,该命令是红帽兼容系列的发行版中用来控制系统服务的实用工具,它以启动、停止、重新启动和关闭系统服务,还可以显示所有系统服务的当前状态。注意CentOS7以后使用了systemctl工具来管理服务,不再使用service。
以下命令不适用于CentOS7
2.1 启动服务
service start
2.2 停止服务
service stop
2.3 重启服务
service restart
原理是先停止再启动
[root@zcwyou ~]# service network status
Configured devices:
lo eth0
Currently active devices:
lo eth0
Linux使用service命令查看某服务的状态
[root@zcwyou ~]# service network restart
Shutting down interface eth0: Device state: 3 (disconnected)
[ OK ]
Shutting down loopback interface: [ OK ]
Bringing up loopback interface: [ OK ]
Bringing up interface eth0: Active connection state: activating
state: activated
Connection activated
[ OK ]
Linux重启某服务
5. 停止网络服务
[root@zcwyou ~]# service network stop
Shutting down interface eth0: Device state: 3 (disconnected)
[ OK ]
Shutting down loopback interface: [ OK ]
Linux停止某服务
[root@zcwyou ~]# service network start
Bringing up loopback interface: [ OK ]
Bringing up interface eth0: Active connection state: activating
state: activated
Connection activated
Linux使用service命令启动服务
7. 重启mysql服务
[root@zcwyou ~] service mysqld restart
stopping MySQL: [ OK ]
starting MySQL: [ OK ]
8.总结
Service命令用于管理程序的运行,该命令只适用CentOS6及更老的版本,CentOS7不建议使用该命令。