约定
1.获取命令帮助胜过死记命令,授人以鱼不如授人以渔。所以,本文不会去逐个选项地解释命令的用法,会把查看命令帮助的方法置于首位。
2.Linux是命令行操作,表面上需要记住很多命令,实际上没那么恐怖,学会查看帮助,以解决问题为导向,很快就会上手。
3.操作系统环境:CentOS6.5,Bash。
$ bash --version
GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
对于LInux基本命令,推荐参考UNIX Tutorial for Beginners。
进程管理
Linux是多用户、多任务操作系统。这句话的意思是,可以有多个用户同时使用Linux,并且每个用户可以同时执行多个任务。形象一点,就是图1的样子。
图1 Linux进程树
显然,所有Linux进程被组织为一棵倒立的树。
那么,我们如何看这一棵树呢?
pstree
查看进程树。
#查看帮助
$ pstree -h
#查看进程树,并且显示各进程的PID
$ pstree -pc
前台进程vs后台进程
我们在shell下每执行一个命令,比如ls,就会创建一个子进程,并且这个子进程会阻塞父进程的执行,阻塞的表现就是终端不出现命令提示符,我们输入不了命令了。本例中,ls回车后终端会立即出现命令提示符,这是因为ls这个进程瞬间执行完了,不再阻塞父进程。
在终端下,这种阻塞父进程执行的子进程就是前台进程。
那如何让子进程不阻塞父进程执行呢?
解决办法就是后台进程。以后台进程的形式执行一个命令就不会阻塞当前进程。
Linux中运行后台进程的方法。
# 方法一:&符号
$ find / -name *.java &
# 方法二:nohup命令
$ nohup find / -name *.java &
# 查看进程的父子关系
$ ps -f PID
通过ps -f PID,你会发现后台进程的PPID(父进程标识符)仍然是当前bash的PID(进程标识符),但是当你退出登录以后,他们的PPID变成1了,1是LInux系统进程init的PID。所以,这里的&符号可以简单理解为非阻塞,或者说给子进程找个干爹init。
前后台进程切换
bg:将前台任务(进程)移到后台执行。
#查看帮助
$ help bg
fg:将后台任务(进程)移到前台执行。
#查看帮助
$ help fg
bg和fg命令很简单,看了帮助就知道怎么用了。
ps
查看进程“快照”,即执行ps命令时的进程状态。
#查看帮助
$ ps --help
#显示所有进程快照,包含PPID信息
$ ps -Af
ps命令的选项很多、很杂,使用时参考帮助即可。
top
实时显示以CPU使用情况为主的进程状态信息。
#查看帮助
$ top -h
#进入top
$ top
输入top,回车,top程序会实时显示进程状态信息,top是可交互的,输入h或者?可以查看交互的命令,输入q退出top命令,使用上类似于vi。
这个命令对于程序员很有用,我们可以实时监控服务器上的应用进程状态,比如负载,各个线程的状态,CPU等系统资源使用情况。
程序员必备:
#实时监控指定进程下的所有线程状态
$ top H p PID | top -H -p PID
kill
向指定进程发送信号。
#查看帮助
$ help kill
#列出当前系统支持的所有信号
$ kill -l
#向8888进程发送SIGTERM信号
#SIGTERM信号将终止所有不能捕获该信号的进程
kill 8888
#向8888进程发送SIGKILL信号
#SIGKILL信号不能被进程捕获
kill -s SIGKILL 8888 | kill -n 9 8888 | kill -9 8888
nice
以指定优先级(niceness)启动一个进程。
#查看帮助
$ nice --help
renice
改变一个正在运行进程的优先级。
#查看帮助
$ renice --help
网友评论