1、cd命令
目前创新互联公司已为成百上千家的企业提供了网站建设、域名、网页空间、网站托管、企业网站设计、阳东网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
这是一个非常基本,也是大家经常需要使用的命令,它用于切换当前目录,它的参数是要切换到的目录的路径,可以是绝对路径,也可以是相对路径。如:
cd
/root/Docements # 切换到目录/root/Docements
cd ./path #
切换到当前目录下的path目录中,“.”表示当前目录
cd ../path #
切换到上层目录中的path目录中,“..”表示上一层目录
2、ls命令
这是一个非常有用的查看文件与目录的命令,list之意,它的参数非常多,下面就列出一些我常用的参数吧,如下:
-l
:列出长数据串,包含文件的属性与权限数据等
-a
:列出全部的文件,连同隐藏文件(开头为.的文件)一起列出来(常用)
-d
:仅列出目录本身,而不是列出目录的文件数据
-h
:将文件容量以较易读的方式(GB,kB等)列出来
-R
:连同子目录的内容一起列出(递归列出),等于该目录下的所有文件都会显示出来
注:这些参数也可以组合使用,下面举两个例子:
ls -l
#以长数据串的形式列出当前目录下的数据文件和目录
ls -lR
#以长数据串的形式列出当前目录下的所有文件
3、grep命令
该命令常用于分析一行的信息,若当中有我们所需要的信息,就将该行显示出来,该命令通常与管道命令一起使用,用于对一些命令的输出进行筛选加工等等,它的简单语法为
grep [-acinv]
[--color=auto] '查找字符串' filename
它的常用参数如下:
-a
:将binary文件以text文件的方式查找数据
-c
:计算找到‘查找字符串’的次数
-i
:忽略大小写的区别,即把大小写视为相同
-v
:反向选择,即显示出没有‘查找字符串’内容的那一行
# 例如:
#
取出文件/etc/man.config中包含MANPATH的行,并把找到的关键字加上颜色
grep --color=auto
'MANPATH' /etc/man.config
# 把ls
-l的输出中包含字母file(不区分大小写)的内容输出
ls -l | grep -i
file
4、find命令
find是一个基于查找的功能非常强大的命令,相对而言,它的使用也相对较为复杂,参数也比较多,所以在这里将给把它们分类列出,它的基本语法如下:
find [PATH]
[option] [action]
# 与时间有关的参数:
-mtime n :
n为数字,意思为在n天之前的“一天内”被更改过的文件;
-mtime +n :
列出在n天之前(不含n天本身)被更改过的文件名;
-mtime -n :
列出在n天之内(含n天本身)被更改过的文件名;
-newer file :
列出比file还要新的文件名
# 例如:
find /root -mtime
0 # 在当前目录下查找今天之内有改动的文件
# 与用户或用户组名有关的参数:
-user name :
列出文件所有者为name的文件
-group name :
列出文件所属用户组为name的文件
-uid n :
列出文件所有者为用户ID为n的文件
-gid n :
列出文件所属用户组为用户组ID为n的文件
# 例如:
find
/home/ljianhui -user ljianhui # 在目录/home/ljianhui中找出所有者为ljianhui的文件
# 与文件权限及名称有关的参数:
-name filename
:找出文件名为filename的文件
-size [+-]SIZE
:找出比SIZE还要大(+)或小(-)的文件
-tpye TYPE
:查找文件的类型为TYPE的文件,TYPE的值主要有:一般文件(f)、设备文件(b、c)、
目录(d)、连接文件(l)、socket(s)、FIFO管道文件(p);
-perm mode
:查找文件权限刚好等于mode的文件,mode用数字表示,如0755;
-perm -mode
:查找文件权限必须要全部包括mode权限的文件,mode用数字表示
-perm +mode
:查找文件权限包含任一mode的权限的文件,mode用数字表示
# 例如:
find / -name
passwd # 查找文件名为passwd的文件
find . -perm 0755
# 查找当前目录中文件权限的0755的文件
find . -size +12k
# 查找当前目录中大于12KB的文件,注意c表示byte
5、cp命令
该命令用于复制文件,copy之意,它还可以把多个文件一次性地复制到一个目录下,它的常用参数如下:
-a :将文件的特性一起复制
-p
:连同文件的属性一起复制,而非使用默认方式,与-a相似,常用于备份
-i
:若目标文件已经存在时,在覆盖时会先询问操作的进行
-r
:递归持续复制,用于目录的复制行为
-u
:目标文件与源文件有差异时才会复制
例如 :
cp -a file1 file2
#连同文件的所有特性把文件file1复制成文件file2
cp file1 file2
file3 dir #把文件file1、file2、file3复制到目录dir中
6、mv命令
该命令用于移动文件、目录或更名,move之意,它的常用参数如下:
-f
:force强制的意思,如果目标文件已经存在,不会询问而直接覆盖
-i
:若目标文件已经存在,就会询问是否覆盖
-u
:若目标文件已经存在,且比目标文件新,才会更新
注:该命令可以把一个文件或多个文件一次移动一个文件夹中,但是最后一个目标文件一定要是“目录”。
例如:
mv file1 file2
file3 dir # 把文件file1、file2、file3移动到目录dir中
mv file1 file2 #
把文件file1重命名为file2
7、rm命令
该命令用于删除文件或目录,remove之间,它的常用参数如下:
-f
:就是force的意思,忽略不存在的文件,不会出现警告消息
-i
:互动模式,在删除前会询问用户是否操作
-r
:递归删除,最常用于目录删除,它是一个非常危险的参数
例如:
rm -i file #
删除文件file,在删除之前会询问是否进行该操作
rm -fr dir #
强制删除目录dir中的所有文件
8、ps命令
该命令用于将某个时间点的进程运行情况选取下来并输出,process之意,它的常用参数如下:
-A :所有的进程均显示出来
-a
:不与terminal有关的所有进程
-u :有效用户的相关进程
-x
:一般与a参数一起使用,可列出较完整的信息
-l
:较长,较详细地将PID的信息列出
其实我们只要记住ps一般使用的命令参数搭配即可,它们并不多,如下:
ps aux #
查看系统所有的进程数据
ps ax #
查看不与terminal有关的所有进程
ps -lA #
查看系统所有的进程数据
ps axjf #
查看连同一部分进程树状态
9、kill命令
该命令用于向某个工作(%jobnumber)或者是某个PID(数字)传送一个信号,它通常与ps和jobs命令一起使用,它的基本语法如下:
kill -signal PID
signal的常用参数如下:
注:最前面的数字为信号的代号,使用时可以用代号代替相应的信号。
1:SIGHUP,启动被终止的进程
2:SIGINT,相当于输入ctrl+c,中断一个程序的进行
9:SIGKILL,强制中断一个进程的进行
15:SIGTERM,以正常的结束进程方式来终止进程
17:SIGSTOP,相当于输入ctrl+z,暂停一个进程的进行
例如:
#
以正常的结束进程方式来终于第一个后台工作,可用jobs命令查看后台中的第一个工作进程
kill -SIGTERM
%1
#
重新改动进程ID为PID的进程,PID可用ps命令通过管道命令加上grep命令进行筛选获得
kill -SIGHUP PID
10、killall命令
该命令用于向一个命令启动的进程发送一个信号,它的一般语法如下:
killall [-iIe]
[command name]
它的参数如下:
-i
:交互式的意思,若需要删除时,会询问用户
-e :表示后面接的command
name要一致,但command name不能超过15个字符
-I :命令名称忽略大小写
# 例如:
killall -SIGHUP
syslogd # 重新启动syslogd
11、file命令
该命令用于判断接在file命令后的文件的基本数据,因为在Linux下文件的类型并不是以后缀为分的,所以这个命令对我们来说就很有用了,它的用法非常简单,基本语法如下:
file filename
#例如:
file ./test
12、tar命令
该命令用于对文件进行打包,默认情况并不会压缩,如果指定了相应的参数,它还会调用相应的压缩程序(如gzip和bzip等)进行压缩和解压。它的常用参数如下:
-c :新建打包文件
-t
:查看打包文件的内容含有哪些文件名
-x
:解打包或解压缩的功能,可以搭配-C(大写)指定解压的目录,注意-c,-t,-x不能同时出现在同一条命令中
-j
:通过bzip2的支持进行压缩/解压缩
-z
:通过gzip的支持进行压缩/解压缩
-v
:在压缩/解压缩过程中,将正在处理的文件名显示出来
-f filename
:filename为要处理的文件
-C dir
:指定压缩/解压缩的目录dir
上面的解说可以已经让你晕过去了,但是通常我们只需要记住下面三条命令即可:
压缩:tar -jcv -f
filename.tar.bz2 要被处理的文件或目录名称
查询:tar -jtv -f
filename.tar.bz2
解压:tar -jxv -f
filename.tar.bz2 -C 欲解压缩的目录
注:文件名并不定要以后缀tar.bz2结尾,这里主要是为了说明使用的压缩程序为bzip2
13、cat命令
该命令用于查看文本文件的内容,后接要查看的文件名,通常可用管道与more和less一起使用,从而可以一页页地查看数据。例如:
cat text | less #
查看text文件中的内容
# 注:这条命令也可以使用less
text来代替
14、chgrp命令
该命令用于改变文件所属用户组,它的使用非常简单,它的基本用法如下:
chgrp [-R]
dirname/filename
-R
:进行递归的持续对所有文件和子目录更改
# 例如:
chgrp users -R
./dir # 递归地把dir目录下中的所有文件和子目录下所有文件的用户组修改为users
15、chown命令
该命令用于改变文件的所有者,与chgrp命令的使用方法相同,只是修改的文件属性不同,不再详述。
16、chmod命令
该命令用于改变文件的权限,一般的用法如下:
chmod [-R] xyz
文件或目录
-R:进行递归的持续更改,即连同子目录下的所有文件都会更改
同时,chmod还可以使用u(user)、g(group)、o(other)、a(all)和+(加入)、-(删除)、=(设置)跟rwx搭配来对文件的权限进行更改。
# 例如:
chmod 0755 file #
把file的文件权限改变为-rxwr-xr-x
chmod g+w file #
向file的文件权限中加入用户组可写权限
18、vim命令
该命令主要用于文本编辑,它接一个或多个文件名作为参数,如果文件存在就打开,如果文件不存在就以该文件名创建一个文件。vim是一个非常好用的文本编辑器,它里面有很多非常好用的命令,在这里不再多说。你可以从这里下载vim常用操作的详细说明。
19、gcc命令
对于一个用Linux开发C程序的人来说,这个命令就非常重要了,它用于把C语言的源程序文件,编译成可执行程序,由于g++的很多参数跟它非常相似,所以这里只介绍gcc的参数,它的常用参数如下:
-o
:output之意,用于指定生成一个可执行文件的文件名
-c
:用于把源文件生成目标文件(.o),并阻止编译器创建一个完整的程序
-I :增加编译时搜索头文件的路径
-L
:增加编译时搜索静态连接库的路径
-S :把源文件生成汇编代码文件
-lm:表示标准库的目录中名为libm.a的函数库
-lpthread
:连接NPTL实现的线程库
-std=
:用于指定把使用的C语言的版本
# 例如:
#
把源文件test.c按照c99标准编译成可执行程序test
gcc -o test
test.c -lm -std=c99
#把源文件test.c转换为相应的汇编程序源文件test.s
gcc -S test.c
20、time命令
该命令用于测算一个命令(即程序)的执行时间。它的使用非常简单,就像平时输入命令一样,不过在命令的前面加入一个time即可,例如:
time ./process
time ps aux
在程序或命令运行结束后,在最后输出了三个时间,它们分别是:
user:用户CPU时间,命令执行完成花费的用户CPU时间,即命令在用户态中执行时间总和;
system:系统CPU时间,命令执行完成花费的系统CPU时间,即命令在核心态中执行时间总和;
real:实际时间,从command命令行开始执行到运行终止的消逝时间;
来自 ;
功能说明:系统关机指令。
语法:shutdown [-efFhknr][-t 秒数][时间][警告信息]
补充说明:shutdown指令可以关闭所 有程序,并依用户的需要,进行重新开机或关机的动作。
参数
-c 当执行"shutdown -h11:50"指令时,只要按+键就可以中断关机的指令。
-f 重新启动时不执行fsck。
-F 重新启动时执行fsck。
-h 将系统关机。
-k 只是送出信息给所有用户,但不会实际关机。
-n 不调用init程序进行关机,而由shutdown自己进行。
-r shutdown之后重新启动。
[-t 秒数] 送出警告信息和删除信息之间要延迟多少秒。
[时间] 设置多久时间后执行shutdown指令。
[警告信息] 要传送给所有登入用户的信息。
此外,需要注意的是,请务必加入时间参数,否则会自动跳到1级运行级别(就是单用户维护的登入情况)。
例子
shutdown 10 10分钟后机器关机
shutdown -h now 立刻关机,其中now相当于时间为0的状态
shutdown -h 20:25 系统在今天的20:25分会关机
shutdown -r now 系统立刻重新启动
shutdown -r +30 'The system willreboot' 再过30分钟系统会自动重启,并显示后面的信息
shutdown -k now 'The system willreboot' 仅发出警告信件的参数。系统并不会关机
Linux下强制中断一个程序的执行,利用按键,而不是kill命令。
可尝试以下方法:
1.CTRL + c 中断。
2.CTRL + z 暂停放到后台。
3.CTRL + d 保存退出。
如上述方法不能解决问题可尝试:
进入相关网站询问客服人员。
寻找线下维修人员,进行询问。
寻找专业人员,寻求帮助。
寻找相关书籍,进行知识解答。
Linux查看进程和终止进程的技巧
1. 在LINUX命令平台输入1-2个字符后按Tab键会自动补全后面的部分(前提是要有这个东西,例如在装了tomcat的前提下,输入tomcat的to按tab)。
2. ps 命令用于查看当前正在运行的进程。
grep 是搜索
例如: ps -ef | grep java
表示查看所有进程里CMD是java的进程信息
ps -aux | grep java
-aux 显示所有状态
ps
3. kill 命令用于终止进程
例如: kill -9 [PID]
-9表示强迫进程立即停止
通常用ps 查看进程PID ,用kill命令终止进程
网上关于这两块的内容
-----------------------------------------------------------------------------------
PS
-----------------------------------------------------------------------------------
1. ps简介
ps命令就是最根本相应情况下也是相当强大地进程查看命令.运用该命令可以确定有哪些进程正在运行和运行地状态、进程是否结束、进程有没有僵死、哪些进程占用了过多地资源等等.总之大部分信息均为可以通过执行该命令得到地.
2. ps命令及其参数
ps命令最经常使用地还是用于监控后台进程地工作情况,因为后台进程是不和屏幕键盘这些标准输入/输出设
备进行通信地,所以如果需要检测其情况,便可以运用ps命令了.
该命令语法格式如下:
ps [选项]
-e 显示所有进程,环境变量
-f 全格式
-h 不显示标题
-l 长格式
-w 宽输出
a 显示终端上地所有进程,包括其他用户地进程
r 只显示正在运行地进程
x 显示没有控制终端地进程
O[+|-] k1 [,[+|-] k2 [,…]] 根据SHORT KEYS、k1、k2中快捷键指定地多级排序顺序显示进程列表.
对于ps地不同格式都存在着默认地顺序指定.这些默认顺序可以被用户地指定所覆盖.在这里面“+”字符是可选地,“-”字符是倒转指定键地方向.
pids只列出进程标识符,之间运用逗号分隔.该进程列表必须在命令行参数地最后一个选项后面紧接着给出,中间不能插入空格.比如:ps -f1,4,5.
以下介绍长命令行选项,这些选项都运用“--”开头:
--sort X[+|-] key [,[+|-] key [,…]] 从SORT KEYS段中选一个多字母键.“+”字符是可选地,因为默认地方向就是按数字升序或者词典顺序.比如: ps -jax -sort=uid,-ppid,+pid.
--help 显示帮助信息.
--version 显示该命令地版本信息.
在前面地选项说明中提到了排序键,接下来对排序键作进一步说明.需要注意地是排序中运用地值是ps运用地内部值,并非仅用于某些输出格式地伪值.排序键列表见表4-3.
表4-3 排序键列表
c
cmd
可执行地简单名称
C
cmdline
完整命令行
f
flags
长模式标志
g
pgrp
进程地组ID
G
tpgid
控制tty进程组ID
j
cutime
累计用户时间
J
cstime
累计系统时间
k
utime
用户时间
K
stime
系统时间
m
min_flt
次要页错误地数量
M
maj_flt
重点页错误地数量
n
cmin_flt
累计次要页错误
N
cmaj_flt
累计重点页错误
o
session
对话ID
p
pid
进程ID
P
ppid
父进程ID
r
rss
驻留大小
R
resident
驻留页
s
size
内存大小(千字节)
S
share
共享页地数量
t
tty
tty次要设备号
T
start_time
进程启动地时间
U
uid
UID
u
user
用户名
v
vsize
总地虚拟内存数量(字节)
y
priority
内核调度优先级
3. 经常使用ps命令参数
最经常使用地三个参数是u、a、x,下面将通过例子来说明其具体用法.
[例20] 以root身份登录系统,查看当前进程状况
$ ps
PID TTY TIME COMMAND
5800 ttyp0 00:00:00 bash
5835 ttyp0 00:00:00 ps
可以看到,显示地项目共分为四项,依次为PID(进程ID)、TTY(终端名称)、TIME(进程执行时间)
、COMMAND(该进程地命令行输入).
可以运用u选项来查看进程所有者及其他少许详细信息,如下所示:
$ ps u
USER PID %CPU %MEM USZ RSS TTY STAT START TIME COMMAND
test 5800 0.0 0.4 1892 1040 ttyp0 S Nov27 0:00 -bash
test 5836 0.0 0.3 2528 856 ttyp0 R Nov27 0:00 ps u
在bash进程前面有条横线,意味着该进程便是用户地登录shell,所以对于一个登录用户来说带短横线地进程只有一个.还可以看到%CPU、%MEM两个选项,前者指该进程占用地CPU时间和总时间地百分比;后者指该进程占用地内存和总内存地百分比.
在这种情况下看到了所有控制终端地进程;当然对于其他那些没有控制终端地进程还是没有观察到,所以这时就需要运用x选项.运用x选项可以观察到所有地进程情况.
-----------------------------------------------------------------------------------
KILL
-----------------------------------------------------------------------------------
由于职责的要求,你不得不费力地阅读那些令你感到费解的晦涩的Linux应用程序的说明文件。然后,你将运行指令和编辑设置文件。一切都在正常 运行,生活真美好。但是,你知道,好时光不会永远持续下去。当你遇到令人恐惧的“send the process a SIGHUP”提示时,好时光结束了。
什么是“SIGHUP(启动信号)”,你如何发送它?它像是你送给你的恋人的一束花吗?虽然你可以肯定这不是一个命令行指令,不过,你还是试着 键入它。当然,这没有结果。然后,你检查一下键盘。哦,没有SIGHUP键。于是你又重新阅读这个应用程序的参考指南,看到下面这段文字:
当收到一个hangup(进程结束)信号时,sshd程序会重新阅读配置文件。通过执行启动程序时的命令及选项来发送SIGHUP信号,如:/usr/sbin/sshd。
哦,原来是这样。
程序员 VS 使用者
LINUX程序的在线参考指南作者一般都要既照顾到最终用户的需求也要照顾到高级程序员的需求。因此,有些说明比较难懂。不过,不要担心。现在我们就要揭开覆盖在这些让人迷惑的内容上面那神秘的面纱。
信号与进程控制
这个问题主要属于信号和进程控制的范畴。对于我们系统管理员和普通用户来说,我们主要关心的是启动、停止和重新启动服务、停止失控的进程和被挂起的进程,并且尽可能不中断系统运行。因为不同的
操作系统和不同的命令外壳处理信号的方式都不相同,我们这里只介绍Linux操作系统和bash外壳。
信号是用来与守护程序和进程通信的。任何活动任务都是一个进程,而守护程序是等待对某些事件做出反应或者按照日程安排执行任务的后台服务。一个 程序必须有建在其中的信号处理程序用于捕获和应答信号。在LINUX中的signal 参考指南解释了各种不同信号和这些信号的用途。信号是由“kill”命令发出的。kill -l命令可以显示一个可用信号列表及其编号。
所有的守护程序和进程都有一个进程ID(PID),例如使用ps命名所显示的内容:
$ ps aux
USER PID %CPU %MEM TTY STAT COMMAND
root 1 0.0 0.1 ? S init [2]
105 7783 0.0 0.2 ? Ss /usr/bin/dbus-daemon --system
hal 7796 0.0 0.7 ? Ss /usr/sbin/hald
postfix 7957 0.0 0.2 ? S qmgr -l -t fifo -u -c
nagios 8371 0.0 0.2 ? SNs /usr/sbin/nagios /etc/nagios/nagios.cfg
这个输出是经过简化的。你在系统中可以看到更多的行和栏目。如果某些进程消耗了你的全部CPU或者内存,你可以在这个输出的%CPU和%MEM 列中发现它们。找到失控的进程的一种更快捷的方法是使用top命令,因为按照默认的设置,使用占用CPU资源最多的进程在最上面显示。我们可以使用一条 “yes”命令来测试一下:
$ yes carla is teh awesum
这个命令将以很高的速度反复显示“carla is teh awesum”,直到你停止它运行。这将使你的CPU使用率达到警戒线。
$ top
...
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
12144 carla 25 0 31592 17m 13m R 93.4 3.5 0:50.26 konsole
22236 carla 15 0 2860 468 400 S 4.3 0.1 0:00.97 yes
分析一下这个结果,你会发现一些有趣的事,你会发现,占用CPU最多的程序是konsole虚拟终端程序,而不是“yes”命令,这是因为 “yes”命令是在konsole终端程序中运行的。如果在一个“真正的”控制台(按Ctrl+alt+f2键)中运行同样的命令序列,你将看到 “yes”命令被排在第一位。
有许多停止“yes”命令运行的方式。如果你要回到运行它的shell中,按CTRL+c键就可以了。或者你可以在另一个shell中用“kill”命令停止“yes”命令的运行,Kill命令后面跟PID或者命令名称,如下如示:
$ kill 22236
或者
$ killall yes
按CTRL+c键发出一个SIGINT(信号2),这个信号是键盘要求取得控制权的中断信号。kill和killall这两个命令按照默认的设 置都发出一个SIGTERM信号(编号15)。程序中可以设置对SIGTERM信号(15)是捕捉或者忽略,或者以不同的方式解释。因此,如果你的程序对 于 KILL命令的反应与你预期不同,很可能是被KILL的目标程序的问题。
终止一个父进程通常也终止了它的子进程。不过,情况并不总是如此。你知道子进程是什么吗?使用ps命令加上-f选项就可以看到,如下所示:
$ ps axf
22371 ? R 2:35 _ konsole [kdeinit]
22372 pts/3 Ss 0:00 | _ /bin/bash
24322 pts/3 S+ 0:00 | | _ yes carla is teh awesum
22381 pts/4 Rs 0:00 | _ /bin/bash
24323 pts/4 R+ 0:00 | | _ ps axf
现在,回到SIGHUP的话题
SIGHUP的发音是“sig-hup”,是signal hangup的缩写,含义是“中止信号”。你如何发送一个SIGHUP信号呢?这里有几种方式:
# kill -HUP [pid]
# killall -HUP [process-name]
# kill -1 [pid]
# killall -1 [process-name]
因此,你可以使用PID或者名称,信号名称或者号码。那么为什么要这样做而不使用/etc/init.d/foo命令重新启动呢?使用它们自己 的 init(初始化)文件来控制服务是优先选择的方式,因为这些文件通常包含健全和错误检查以及额外的功能。使用“kill”命令和信号的主要原因是尽可能 明确地终止挂起和失控的进程,而不必重新启动或者登出。
终止进程
正如你在关于信号的man page中所看到的,有十几种控制进程的方法。下面是一些常用的方法:
kill -STOP [pid]
发送SIGSTOP (17,19,23)停止一个进程,而并不消灭这个进程。
kill -CONT [pid]
发送SIGCONT (19,18,25)重新开始一个停止的进程。
kill -KILL [pid]
发送SIGKILL (9)强迫进程立即停止,并且不实施清理操作。
kill -9 -1
终止你拥有的全部进程。
SIGKILL和SIGSTOP信号不能被捕捉、封锁或者忽略,但是,其它的信号可以。所以这是你的终极武器。
Bash shell的Kil命令l
Bash外壳包含一个内置的kill命令,当执行下面命令:
$ type -all kill
kill is a shell built-in
kill is /bin/kill
命令的结果表明有两个kill命令,一个是BASH的内置命令,另一个是/bin/kill可执行程序。一般来说这两个命令不太可能遇到冲突的情况,不过,如果你确实遇到了kill命令行为异常时,你可以明确的指定/bin/kill命令。
你一定要进一步查阅下面的资源中列出的参考资源来了解Linux中kill的妙用,因为这是你进入维护Linux系统领域的门票。这些知识能够让你像做外科手术一样对系统进行维护,而不用在遇到问题时每一次都重新启动系统,就像我们知道的某些蹩脚的
操作系统那样。
资源
Linux Cookbook一书的第七章“开始和终止Linux”
bash (1) - GNU Bourne-Again Shell
yes (1) - 在被终止前反复打印字符
signal (7) - 可用信号列表
ps (1) - 报告当前进程的快照
kill (1) - 向一个进程发出信号
killall (1) - 按名字消灭进程
pkill (1) - 根据名字和其它属性查看或者发出进程信号
skill (1) - 发送一个信号或者报告进程状态
xkill (1) - 按照X资源消灭一个客户程序
1,Linux中的kill命令用来终止指定的进程(terminate a process)的运行,是Linux下进程管理的常用命令。通常,终止一个前台进程可以使用Ctrl+C键,但是,对于一个后台进程就须用kill命令来终止,我们就需要先使用ps/pidof/pstree/top等工具获取进程PID,然后使用kill命令来杀掉该进程。kill命令是通过向进程发送指定的信号来结束相应进程的。在默认情况下,采用编号为15的TERM信号。TERM信号将终止所有不能捕获该信号的进程。对于那些可以捕获该信号的进程就要用编号为9的kill信号,强行“杀掉”该进程。
2,常用参数:
-l 信号,若果不加信号的编号参数,则使用“-l”参数会列出全部的信号名称
-a 当处理当前进程时,不限制命令名和进程号的对应关系
-p 指定kill 命令只打印相关进程的进程号,而不发送任何信号
-s 指定发送信号
-u 指定用户
3,实例:
彻底杀死进程 kill -9 2954
[root@localhost test6]# ps -ef|grep vim
root 3268 2884 0 16:21 pts/1 00:00:00 vim install.log
root 3370 2822 0 16:21 pts/0 00:00:00 grep vim
[root@localhost test6]# kill –9 3268
[root@localhost test6]# kill 3268
-bash: kill: (3268) - 没有那个进程
[root@localhost test6]#
杀死指定用户所有进程
kill -9 $(ps -ef | grep peidalinux)
kill -u peidalinux
[root@localhost ~]# kill -9 $(ps -ef | grep peidalinux)
[root@localhost ~]# kill -u peidalinux
1、信号:传递给 Liunx 的事件发生通知机制。
2、kill -l:显示所有信号。一共有62个信号(没有32、33)。
3、常用的信号有:
kill -2 PID —— 正常中断进程(Ctrl + C 一样)。程序在结束之前,能够保存相关数据,然后再退出。
kill -9 PID —— 强制杀死一个进程。
kill -15 PID —— 正常方式终止一个程序。中断进程时应首先用 -15,以便于其能够预先清理临时文件和释放资源。-9 作为最后手段,应对那些失控的进程。
--------------------------------------------------------------------------------
1)、kill -2 中断后台运行的进程。
红色下划线:sleep 10000 —— 后台运行延时 10000 秒的命令,进程 ID 为1516。
ps -j —— 以作业格式列出进程信息,可以看到 1516 sleep 命令的进程。
(PID:进程 ID、PGID:线程组 ID、SID:会话 ID、TTY:进程运行的终端,标识那个终端控制。(pts远程终端、tty系统终端)、TIME:进程运行的时间 和 CMD:命令的名称和参数)。
jobs -l —— 列出后台运行的命令,可以看到 1516 sleep 命令正在后台运行。
黄色下划线:kill -2 1516 —— 中断1516 进程。执行成功后,按 Enter 回车系统会给出提示Interrupt 提示(中断进程)。
蓝色方框:ps -j 已查询不到 1516 sleep 的进程。jobs -l 也没有后台运行的命令。
2)、kill -2 配合 fg 查看中断挂起的进程。
红色下划线:前台执行 sleep 10000 (延时10000秒)后 ctrl + z 挂起。
黄色下划线:ps -j 查看进程,可以看到 1344 sleep 进程。jobs -l 查看后台进程 1344 的状态是stopped 暂停状态。
蓝色下划线:kill -2 1344 中断 1344 进程。
绿色下划线:ps -j 查看进程,仍有 1344 sleep 进程。jobs -l 查看后台进程 1344 的状态是stopped 暂停状态。
暂时这样看,好像 kill -2 并没有起到中断进程的作用。
然而,用 fg 把后台的命令调至前台运行时可以发现 1344 sleep 已经被中断。
红色下划线:fg 把已经执行了 kill -2, 状态为 stopped 的1344 sleep命令调至前台执行。系统也反馈已经调至前台执行。(此时,实际上已经执行了 kill -2 中断了进程)
黄色方框:ps -j 已经没有了 1344 sleep 的进程。
蓝色方框:jobs -l 后台也没有指令。
3)、kill -2 配合 bg 查看中断挂起的进程。
通过上面的思路,kill -2 配合 bg 实验看看效果。同样的首先挂起一个命令,状态为 stopped 暂停。然后用 bg 命令恢复执行。
前面的步骤都是一样,挂起一个命令。通过 ps 和 jobs 查看进程和后台确认有 1379 的进程,状态为 stopped 暂停。然后执行 kill-2 中断进程,再次通过ps 和 jobs 查看进程和后台命令。确认状态为 stopped 1379 的进程仍然存在。
此时,用 bg 恢复运行挂起的命令,系统提示 sleep 命令已恢复在后台运行。然而通过 ps -j 查看进程会发现 sleep 已经被中断。jobs -l 查看后台也没有了运行的 sleep 命令了。
从实验上看:
1、后台命令运行时(Running),执行 kill -2 可以中断进程。
2、挂起命令,处于暂停状态时(Stopped),执行 kill -2 后通过 ps 还可以查询到进程, jobs还可以查询到后台命令,状态仍然是 Stopped 暂停状态。实际上,用 fg 把暂停的后台进程调至前台运行时,系统反馈 sleep 命令调至前台运行。而再用 ps 查询不到进程,已经中断了进程。用 jobs 已经查询不到后台命令。
3、挂起命令,处于暂停状态时(Stopped),执行 kill -2 后通过 ps 还可以查询到进程, jobs还可以查询到后台命令,状态仍然是 Stopped 暂停状态。用 bg 把暂停的后台命令恢复运行时,系统反馈 sleep 命令在后台运行。再用 ps 查询进程已经中断,用 jobs 已经查询不到后台命令。