天天看点

Linux基础:调查和管理进程

什么是进程?

进程是被载入内存的一个指令集合

  进程ID(Process ID,PID)号码被用来标记各个进程

  UID、GID相关权限和 SElinux决定对文件系统的存取和访问

  通常从执行进程的用户处继承

查看进程

使用ps来查看进程信息

  仅执行ps,显示当前终端中的进程

  a 选项包括与现行终端的所有进程

  x 选项包括不连接终端的进程

  u 选项显示进程所有者的信息

  f 选项显示进程的父进程

  o 属性,…选项显示定制的信息:

  ps  axo  

  pid,comm,%cpu,%mem,state,tty,ppid,pri,ni,user,cmd

  ps aux  ;  ps -l

搜索进程

最灵活:ps 选项 | 其它命令

ps axo comm,tty | grep ttyS0

按预定义的模式:pgrep

$ pgrep -U uid    sshd

$ pgrep -G gid     sshd

按确切的程序名称:pidof :找出一个程序的pid

$ pidof bash

Ps选项  

默认显示当前终端中的进程

-a 选项包括所有终端中的进程

-x 选项包括不连接终端的进程

-u 选项显示进程所有者的信息

-f 选项显示进程的父进程

-e选项是现实所有进程

-p pid 显示些pid的进程信息

-o 属性,…选项显示定制的信息:

pid、comm、%cpu、%mem、state、tty、euser、ruser

ps  -e   两个都是查看所有进程

ps  -ef

ps  axo comm,tty|grep tty

<a href="http://blog.51cto.com/attachment/201308/182220961.png" target="_blank"></a>

pgrep  -U root ssh

<a href="http://blog.51cto.com/attachment/201308/182220572.png" target="_blank"></a>

pgrep –G root |more

<a href="http://blog.51cto.com/attachment/201308/182222523.png" target="_blank"></a>

查找cups进程

<a href="http://blog.51cto.com/attachment/201308/182226287.png" target="_blank"></a>

产看进程id号

<a href="http://blog.51cto.com/attachment/201308/182226941.png" target="_blank"></a>

通过一下选项显示进程的详细信息

<a href="http://blog.51cto.com/attachment/201308/182228197.png" target="_blank"></a>

列出进程调用bash的进程号

<a href="http://blog.51cto.com/attachment/201308/182229542.png" target="_blank"></a>

或者通过pidof 来查看bash进程

<a href="http://blog.51cto.com/attachment/201308/182231638.png" target="_blank"></a>

信号

最基本的进程间通讯方式

  -直接发送给进程,不需要用户界面

  -程序给每个信号关联动作

  -发送信号可以使用名称或号码:

    信号15 ,TERM(默认):正常终止

    信号9,KILL:强制立即终止

    信息1,HUP:重读配置文件

    man 7 signal 显示了完整列表信息,比较详细

通过kill -l 来查看信号类型,但是信息没有那么详细

<a href="http://blog.51cto.com/attachment/201308/182233495.png" target="_blank"></a>

给进程发送信号

按PID:kill [-信号] pid …

按名称:killall [-信号] bash

按模式:pkill [-信号] 模式 

例如查看rsyslogd进程号,然后通过kill重新启动

<a href="http://blog.51cto.com/attachment/201308/182237356.png" target="_blank"></a>

通过tail命令查看是否重新启动

<a href="http://blog.51cto.com/attachment/201308/182248960.png" target="_blank"></a>

例子1:把SIGHUP命令发送给rsyslogd

#killall -1 rsyslogd

例子2:强制终止httpd进程

#killall -9 httpd

调度优先性

调度优先级priority决定对CPU的使用顺序

优先级受进程的nice值(nice value)影响

这个nice值的范围是-20到19,默认为0

   -pri值越小,说明对CPU的使用越优先

使用ps –o comm,nice ;ps axo pid,nice,user

ps -l 命令可以查看

<a href="http://blog.51cto.com/attachment/201308/182252355.png" target="_blank"></a>

改变调度优先性

nice值可以被改变…

  -在启动进程时:

      nice  -n +5     命令名字

      nice   -n -10    命令名字

  -在启动后:

     $ renice  +5   PID     ;  renice  -5   PID  

     $ renice  -n +5   PID     ;  renice -n  -5   PID

只有根用户才能降低nice值(提高优先性)        nice -n -10 vim                      nice -n +10 vim 

普通用户的nice只能是0-19,而且每只能比前一次大

查看comm,和nice

启动进程时给定nice值:nice –n 5 命令

<a href="http://blog.51cto.com/attachment/201308/182312963.png" target="_blank"></a>

修改bash的nice值

<a href="http://blog.51cto.com/attachment/201308/182317434.png" target="_blank"></a>

修改bash的nice值为15 renice –n 15  pid

<a href="http://blog.51cto.com/attachment/201308/182321188.png" target="_blank"></a>

查看bash的nice值是否发生变化

<a href="http://blog.51cto.com/attachment/201308/182328251.png" target="_blank"></a>

修改vim的nice值

<a href="http://blog.51cto.com/attachment/201308/182332968.png" target="_blank"></a>

通过例子可以看到root可以使nice值变小,也可将变小的值提高

<a href="http://blog.51cto.com/attachment/201308/182335116.png" target="_blank"></a>

查看普通用户能否修改nice值

<a href="http://blog.51cto.com/attachment/201308/182941921.jpg" target="_blank"></a>

交互式进程管理工具

动态查看进程信息的命令行:top

(信息)查看rhce-||调查和管理进程.doc文档

关于top命令的用法

M:以内存使用为序排列

P:以cpu的使用率排列

h:帮助

q(小写):退出

  图形化界面:gnome-system-monitor

  能力

   -显示实时进程信息

   -允许排序、中止运行、和重设nice值

Gnome-system-monitor

<a href="http://blog.51cto.com/attachment/201308/182406887.png" target="_blank"></a>

作业控制

前台与后台区别

在后台运行进程

-在命令行后添加一个和号(&amp;): firefox&amp;

将进程放到后台中暂时停止:

-使用Ctrl -z 或发送信号 19 (STOP)

管理后台作业或暂停的作业

-列举作业号码和名称:jobs

-在后台恢复运行:bg  [%作业号码]

-在前台恢复运行:fg   [%作业号码]

-发送信号:kill  -[信号]  [%作业号码]

计划任务与例行任务

一次性作业使用at,重复性作业使用crontab

<a href="http://blog.51cto.com/attachment/201308/182409482.png" target="_blank"></a>

没有被重导向的输出会被邮寄给用户

根用户能够修改其它用户的作业

*   The  superuser  may  use  these commands in any case.  For other users, permission to use at is determined by the

*   files /etc/at.allow and /etc/at.deny.

*   If the file /etc/at.allow exists, only usernames mentioned in it are allowed to use at.

*   If /etc/at.allow does not exist, /etc/at.deny is checked, every username not mentioned in it is then  allowed  to

*   use at.

*   If neither exists, only the superuser is allowed use of at.

*   An empty /etc/at.deny means that every user is allowed use these commands, this is the default configuration.

与at有关的配置文件,at.allow,at.deny

at.allow优先级比at.deny的高:

 1.先看at.allow,有在里面的用户可以使用at

  at.allow不存在时,则检查at.deny,里面的用户不能使用

 2.两个文件不存在则只有root才可以使用

 一般系统默认只有一个空的at.deny,意味着系统里所有的用户都可以使用at,

  两个文件里写用户里一行一个用户

步骤

1、先service atd start|restart

2、at   时间 

时间:at  now + 20 minutes

             at  20:39 2013-4-13

回车后,可以输入要执行的命令

输入完成后ctrl+d

atq = at -l   查看

atrm 作业号= at -d   作业号

Crontab文件格式

项目包含五个用空格分隔的字段,然后是要执行的命令

每行一个项目,行的长度没有限制

字段是:分钟、小时、日期、月份、星期几

注释行以#开头

详细参见man 5 crontab的说明书页

与crontab有关的配置文件:cron.allow、cron.deny

1.先看cron.allow,在里面的用户则可以使用crontab

2.没有cron.allow的,检查cron.deny,在里面的不可以使用crontab

3.两个文件都不存在时只有root可以使用

一般系统默认只有一个空的cron.deny,意味着所有人都可以使用

以上两个文件一行一个用户账号

步骤:

 1  /etc/init.d/crond  start|restart或者service crond start|restart

  2  crontab -e 

  3  出现的vi编辑器输入要执行的命令,一行一个任务,输入完了:wq保存退出

查看:crontab -l 

 删除此用户所有任务:crontab -r

只想修改,crontab -e

/etc/crontab

系统自动周期性执行

vim /etc/crontab

      SHELL=/bin/sh

       MAILTO=paul

       # run five minutes after midnight, every day

       5 4 3 6 *       $HOME/bin/daily.job &gt;&gt; $HOME/tmp/out 2&gt;&amp;1

       # run at 2:15pm on the first of every month -- output mailed to paul

       15 */2  1 *   *     $HOME/bin/monthly

       # run at 10 pm on weekdays, annoy Joe

      0 22 * * 1-5    mail -s "It’s 10pm" joe%Joe,%%Where are your kids?%

       23 0-23/2 * * * echo "run 23 minutes after midn, 2am, 4am ..., everyday"      5 4 * * sun     echo "run at 5 after 4 every sunday"

聚集命令

聚集命令概念:把命令写在一起

有两种聚集命令的方法:

  -复合式:date; who | wc –l

     命令会一个接一个地运行

子shell:(date;who | wc –l)&gt;&gt; /tmp/trace

  -所有的输出都被发送给单个STDOUT和STDER

例子

<a href="http://blog.51cto.com/attachment/201308/182410260.png" target="_blank"></a>

<a href="http://blog.51cto.com/attachment/201308/182411381.png" target="_blank"></a>

退出状态

进程使用退出状态来报告成功或失败

-0代表成功,1-255代表失败

-$? 变量保存上一条的命令退出状态

-exit [num]:终止,并把状态设置为num

-Shell脚本可以自定义错误信息

例如:

 $ ping -c 1 -W 1 station999 &amp;&gt; /dev/null 

 $ echo $?

<a href="http://blog.51cto.com/attachment/201308/182413126.png" target="_blank"></a>

正常执行echo $?返回0 ,错误的话返回大于零的数字

条件性的执行操作符

根据退出状态而定,命令可以有条件地运行

&amp;&amp; 代表条件性的AND THEN

&amp;&amp;只有第一条命令只有执行成功后,才能那个执行第二条命令

  ||  代表条件性的OR ELSE

||只有第一条命令执行失败后,才能执行第二条命令

 $ grep -q no_such_user /etc/passwd || echo 'No such user' 

 No such user

 $ ping -c1 -W2 station1 &amp;&gt; /dev/null  \

 &gt;    &amp;&amp; echo "station1 is up"         \

 &gt;    || (echo 'station1 is unreachable'; exit 1) 

 station1 is up 

test 命令

判断条件是否成立,以便用在条件性执行中

条件成立,则为真,则返回0

条件不成立,则为假,则返回非0

长格式的例子:

  $ test "$A" = = "$B" &amp;&amp; echo "Strings are equal" 

  $ test "$A" -eq "$B" &amp;&amp; echo "Integers are equal" 

简写格式的例子:

  $ [   "$A"   ==    "$B"    ] &amp;&amp; echo "Strings are equal“

  $ [   "$A"   -eq  "$B"   ] &amp;&amp; echo "Integers are equal" 

<a href="http://blog.51cto.com/attachment/201308/182415485.png" target="_blank"></a>

查看日志的重要性

日志的作用

  解决系统故障

  解决网络服务问题

  记录登陆信息

常见的日志文件

/var/log/secure 记录用户登录系统,只有有要求输入密码的就纪录

/var/log/wtmp 记录登陆者的信息数据,由于这个文件已编码,只能使用last命令来查看

/var/log/messages 这个文件相当重要,只是系统的错误信息都会记录在这个文件中

/var/log/boot.log 记录开机或一些服务启动和关闭信息

/var/log/maillog 和/var/log/mail/*记录邮件来往的用户记录

/var/log/cron 记录crontab例行性服务的内容

/var/log/httpd ,/var/log/news /varlog/samba 等记录网络服务的文件

     本文转自Tar0 51CTO博客,原文链接:http://blog.51cto.com/tar0cissp/1275495,如需转载请自行联系原作者

继续阅读