shell编程之基本bash命令
Posted 射手座IT俱乐部
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell编程之基本bash命令相关的知识,希望对你有一定的参考价值。
跟踪运行在系统中的程序是我们Linux系统管理员面临的最复杂的任务之一,尤其是图形化桌面集成了大量的应用时候,此时,系统中总会运行着大量的应用程序。我们来看看管理进程的系列命令。
探查进程命令 ps
实时监测进程命令 top
结束进程命令 kill 和killall
探查进程命令 ps:ps命令能够输出运行在系统上的所有程序的许多信息。
今天我们以Ubuntu为平台,看一下其用法:
$ ps
PID TTY TIME CMD
4639 pts/0 00:00:00 bash
4674 pts/0 00:00:00 ps
默认情况下,它只显示运行在当前控制台下仅属于当前用户的进程。上面的例子中,我们可以看到,目前我们只运行了bash shell 和ps命令。它依次显示了程序的进程ID(PID),运行的终端(tty)以及进程所用的CPU时间。
我们先罗列一些Unix风格下的ps参数:
参数 | 用途 |
---|---|
-A | 显示所有进程 |
-e | 显示所有进程 |
-a | 显示除控制进程和无终端进程外的所有进程 |
-d | 显示除控制进程外的所有进程 |
-f | 显示完整格式的输出 |
-F | 显示更多额外输出(相对于-f参数) |
-l | 显示长列表 |
-j | 显示任务信息 |
更多可以使用#ps —help list 或 #ps —help all 查看该命令的一些参数信息。
其实我们可以根据自己的使用习惯,记住一些有用的参数即可。例如:
$ ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 07:11 ? 00:00:01 /sbin/init
root 2 0 0 07:11 ? 00:00:00 [kthreadd]
root 3 2 0 07:11 ? 00:00:00 [ksoftirqd/0]
root 5 2 0 07:11 ? 00:00:00 [kworker/0:0H]
root 6 2 0 07:11 ? 00:00:00 [kworker/u4:0]
root 7 2 0 07:11 ? 00:00:00 [rcu_sched]
root 8 2 0 07:11 ? 00:00:00 [rcu_bh]
root 9 2 0 07:11 ? 00:00:00 [migration/0]
root 10 2 0 07:11 ? 00:00:00 [watchdog/0]
root 11 2 0 07:11 ? 00:00:00 [watchdog/1]
root 12 2 0 07:11 ? 00:00:00 [migration/1]
root 13 2 0 07:11 ? 00:00:00 [ksoftirqd/1]
root 14 2 0 07:11 ? 00:00:00 [kworker/1:0]
root 15 2 0 07:11 ? 00:00:00 [kworker/1:0H]
root 16 2 0 07:11 ? 00:00:00 [kdevtmpfs]
root 17 2 0 07:11 ? 00:00:00 [netns]
root 18 2 0 07:11 ? 00:00:00 [perf]
root 19 2 0 07:11 ? 00:00:00 [khungtaskd]
(后面的省略了)
这个参数根据上表,我们已经知道该命令显示所有运行在系统上的进程(-e)并扩展了输出(-f)。
我们依次来看里面的参数:
UID : 启动该进程的用户
PID : 进程的进程ID号
PPID: 父进程的进程号(前提是该进程是由其他进程启动的)
C : 该进程生命周期中的CPU利用率
STIME : 进程启动时的系统时间
TTY : 进程启动时的终端设备
TIME : 运行该进程需要累计的CPU时间
CMD : 启动的程序的名称。、
我们再来看一下-l的参数:
$ ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 1000 4639 4638 0 80 0 - 5746 wait pts/0 00:00:00 bash
0 R 1000 4793 4639 0 80 0 - 6974 - pts/0 00:00:00 ps
其中的参数解释如下:
F : 内核分配给进程的系统标记
S : 进程的状态:
S 代表 休眠
R 代表 可运行并正等待运行
O 代表 正在运行
Z 代表 僵化,进程已经结束但父进程也也不存在
T 代表 停止
PRI : 进程优先级 ,数字越大,优先级越低
NI : 谦让度值用来参与决定优先级
SZ : 如果进程被换出了,所需要的交换空间的大小参考值
这些都是大体的ps命令需要大家知道的一些知识。关键是查看进程,需要有我们的一套方案,比如这个#ps -ef命令,就可以了。
这个命令有个不足,那就是它仅仅是显示了特定的一个时间点的信息。并不是实时监控进程的命令。这一点也要注意。
ps命令有很多风格,例如Unix、BSD以及GNU,不同风格其参数或方式可能有所不同。
例如GNU风格下的—forest参数:
$ ps -ef --forest
UID PID PPID C STIME TTY TIME CMD
root 2 0 0 07:11 ? 00:00:00 [kthreadd]
root 3 2 0 07:11 ? 00:00:00 \_ [ksoftirqd/0]
root 5 2 0 07:11 ? 00:00:00 \_ [kworker/0:0H]
root 6 2 0 07:11 ? 00:00:00 \_ [kworker/u4:0]
(略)
root 872 1 0 07:11 ? 00:00:00 /usr/sbin/sshd -D
root 4629 872 0 07:12 ? 00:00:00 \_ sshd: vagrant [priv]
vagrant 4638 4629 0 07:12 ? 00:00:00 \_ sshd: vagrant@pts/0
vagrant 4639 4638 0 07:12 pts/0 00:00:00 \_ -bash
vagrant 4855 4639 0 08:05 pts/0 00:00:00 \_ ps -ef --forest
root 876 1 0 07:11 ? 00:00:05 /usr/bin/dockerd -H fd://
从这里可以让大家很方便的看出进程的层次关系信息,让我们跟踪子父进程变得容易了很多。
如果有兴趣,大家可以从网上查询不同风格的ps命令的各个参数的用法。
转载请注明出处。
了解更多,请关注我们的微信公众号:
射手座IT俱乐部
以上是关于shell编程之基本bash命令的主要内容,如果未能解决你的问题,请参考以下文章