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命令的主要内容,如果未能解决你的问题,请参考以下文章

shell编程之基本bash命令

shell编程之基本bash命令

Linux之shell编程的基本使用

Bash脚本之ifcaseread和位置参数

Shell编程Shell中Bash基本功能

Shell编程Shell中Bash基本功能