天天看点

linux下进程管理1、linux下启动进程的两种方式:2、at命令 启动进程3、cron命令启动进程4、查看进程状态5、进程控制

1、linux下启动进程的两种方式:

(1)方式一

手动启动:即用户输入命令直接启动。 分为前台运行和后台运行。

(2)方式二

调度启动:即系统根据事先的设定自行启动进程。

  • at命令:在指定时刻运行某一个进程。
  • cron命令:周期性的执行相关进程。

2、at命令 启动进程

(1)at命令功能简介

在指定的时刻执行相关的进程。

(2)使用at命令需要具备的条件

需要开启atd服务。

  • 检查atd服务有无开启的命令 :

    $ ps -eLf | grep atd

  • 如果没开启的话,开启atd服务的命令:

    /etc/init.d/atd start or restart

注意:atd 是守护进程,守护进程和任何终端没有关系,因此at指令要将输出重定向到文件中,否则不会显示。

(3)at命令的基本语法
  • 进入at提示模式:

    $ at [参数] [时间]

  • 进入后的提示符为:

    at >

  • 退出at命令:在提示符状态下输入:

    ctrl+d

举栗子: 终端中输入:

$ at 21:01 2020-03-01

,然后出现了at> 提示符,这个时候键入

./helloworld >hello.txt

,然后按

ctrl + D

键退出 at命令。

在到21:01时,文件hello.txt中就会被写入: hello world!

linux下进程管理1、linux下启动进程的两种方式:2、at命令 启动进程3、cron命令启动进程4、查看进程状态5、进程控制

注意: 由于atd服务是守护进程,而守护进程和终端设备不会建立任何联系,因此在屏幕上是看不到打印输出的,必须重定向到文件中。

(4)at命令中的时间格式
  • HH:MM YYYY-MM-DD

    说明:规定在某年某月的某一天的特殊时刻进行该项任务

    at 04:00 2009-03-17

  • HH:MM[am|pm] + number [minutes|hours|days|weeks]

    说明:规定在某个时间点再加多少时间后才进行该项任务

    举例:

    $at now + 5 minutes

    现在5分钟后

    $at 04:00pm + 3 days

    3天后下午4点

注意:(3)的例子便是使用了这中格式的时间。

  • 能够直接使用today(今天)、tomorrow(明天)来指定完成命令的时间

    举例:在20:52 执行 hello_world 程序,并且重定向到hello.txt 文件中。

    我运行程序的时候是20:50,可以发现在到了20:52的时候,hello.txt 文件中便会写入:hello world!

(5)与at命令相关的其它命令
  • atq命令

    功能:查询当前的等待任务,被执行之后就不会显示。

    使用:没有参数

    举栗子: 创建一个任务,在21:10执行,当退出时,可以看到新创建的任务分配的任务号为7。这个时候在终端中输入atq 命令,就可以看到等待执行的任务。

    linux下进程管理1、linux下启动进程的两种方式:2、at命令 启动进程3、cron命令启动进程4、查看进程状态5、进程控制
  • atrm命令

    功能:删除系统中由at建立的正在等待被执行的任务。

    使用: $atrm 任务的工作号(工作号为第一个参数)

    linux下进程管理1、linux下启动进程的两种方式:2、at命令 启动进程3、cron命令启动进程4、查看进程状态5、进程控制
    还是刚才额例子,这个时候在终端中键入 $ atrm 7再次使用$atq 命令就会发现 任务号为7的任务不再等待执行了。

注意:上面的例子会使用到这段代码,需要编译一下:

//在工作目录下创建一个 hellworld.c ,并且编译重命名为 helloworld 
#include <stdio.h>
int main(){
    printf("hello world!\n");
    return 0;
}
           

3、cron命令启动进程

(1)cron命令功能简介

周期性执行相关进程。

(2)使用cron命令需要具备的条件

需要开启cron服务。

  • 检查atd服务有无开启的命令 :

    $ps -ef | grep cron

(3)cron命令的基本语法

进入后会让选择编辑器,一般选择:/usr/bin/vim.basic。如果选择错了,可以退出cron,重新指定默认编辑器,命令如下:

select-editor    //选择编辑器
           

注意:select和-editor 中间没有空格。

(4)进入cron后基本编辑

编辑基本格式 :

*  *  *  *  *  command

分  时 日  月  周  命令

每个

*

代表的时间和下面对应,共5个

*

,前五个星,用来指定时间,最后command用来指定需要执行的命令(或者说创建什么任务)。

具体的解释和限制如下:

  • 第1列表示分钟1~59 每分钟用*或者 */1表示
  • 第2列表示小时1~23(0表示0点)
  • 第3列表示日期1~31
  • 第4列表示月份1~12
  • 第5列标识号星期0~6(0表示星期天)
  • 第6列要运行的命令

(5)时间规则

  • 如果写为

    *

    , 表示每

    *

    多代表的时间 。(即:第一列如果指定为*,则表示每分钟,第二列指定为

    *

    ,表示每小时…)
  • 如果想定义间隔,在*后加 “/” 和间隔的数字

    举栗子:每隔一分钟打印一下系统时间,并重定向到t.log文件中:

    */1 * * * * date >> ~/t.log

  • -

    代表从某个数字到某个数字
  • ,

    分开几个离散的数字

    举栗子:晚上11点到早上7点之间每两个小时,早上八点

0 23-7/2,8 * * * echo "Have a good dream" >> /tmp/test.txt

(6)举栗子

每分钟执行一次./hello_world 并将结果打印到hello.txt 中。

键入:

* * * * * ./hello_world > hello.txt

保存退出。

linux下进程管理1、linux下启动进程的两种方式:2、at命令 启动进程3、cron命令启动进程4、查看进程状态5、进程控制

终端则会如有如下提示(代表你创建了一个周期性任务):

![在这里插入图片描述](https://img-blog.csdnimg.cn/20200301213524826.png

(7)与cron 相关的其他命令

  • crontab -u //设定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数 ,即root用户查看其他用户的cron 服务信息。-u在没指定的情况下,代表实际用户。如下
  • root查看某用户的cron设置:crontab -u yuanjianyu -l

    ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200301215423926.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpbnRpYW55aTk5MjE=,size_16,color_FFFFFF,t_70

  • root 查看自己的cron 设置
    linux下进程管理1、linux下启动进程的两种方式:2、at命令 启动进程3、cron命令启动进程4、查看进程状态5、进程控制
  • 普通用户查看自己名下的任务(普通用户不指定 -u,只能查看自己的cron服务):

    crontab -l

    linux下进程管理1、linux下启动进程的两种方式:2、at命令 启动进程3、cron命令启动进程4、查看进程状态5、进程控制
  • crontab -r //删除某个用户的cron服务

    例如:root用户删除yuanjianyu用户的cron服务。

    linux下进程管理1、linux下启动进程的两种方式:2、at命令 启动进程3、cron命令启动进程4、查看进程状态5、进程控制
    注意:普通用户也可以自己删除自己额cron服务。

4、查看进程状态

(1)查看进程状态信息之一——ps命令

  • ps命令是Process Status的缩写。

    ps命令用来列出系统中当前运行的那些进程。ps命令列出的是当前那些进程的照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信息,就可以使用top命令。

  • ps -aux

    Linux中可以使用ps -aux查看所有进程。

    linux下进程管理1、linux下启动进程的两种方式:2、at命令 启动进程3、cron命令启动进程4、查看进程状态5、进程控制

快照中:

  • PID代表进程ID
  • TTY是该进程是由哪个控制台启动的
  • CMD则是命令

注意:

  • 如果想列出更详细的信息,则可使用命令:“ps-auxw”。参数w表示加宽显示的命令行,参数w可以写多次,通常最多写3次,表示加宽3次,这足以显示很长的命令行了。
  • 在终端直接输入ps 显示当前终端上运行的进程。

(2)查看进程状态信息之一——top命令

top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。下面详细介绍它的使用方法。

linux下进程管理1、linux下启动进程的两种方式:2、at命令 启动进程3、cron命令启动进程4、查看进程状态5、进程控制

注意:

  • 图片中的信息在一直变化。
  • top的升级版本为htop,体验更好。
linux下进程管理1、linux下启动进程的两种方式:2、at命令 启动进程3、cron命令启动进程4、查看进程状态5、进程控制

5、进程控制

(1)kill 命令—— 向进程发送信号

  • 功能:向进程发送信号(包括暂停等信号)。
  • 通过kill -l查看kill所支持发送的信号。
    linux下进程管理1、linux下启动进程的两种方式:2、at命令 启动进程3、cron命令启动进程4、查看进程状态5、进程控制
  • 通过kill -signalnum pid的方式向进程发送信号

    举栗子:

    kill -19 4682

    向pid=4682的进程发送SIGSTOP信号暂停进程。

注意:如果不选择信号的累心默认情况下发送的是SIGKILL信号。

(2)指定(nice命令)、更改(renice)进程优先级

  • nice是按照指定的优先级执行命令
  • renice更改正在运行的进程的优先级

系统中运行的每个进程都有一个优先级(亦称nice 值),其范围从 -20 (最高优先级)到 19 (最低优先级)。优先级越高,其值越小。默认情况下,进程的优先级是 0 (基本调度优先级)。

优先级比较大的进程(nice 值比较小,最低到 -20)相对优先级比较小的进程(直到 19)将比较频繁地被调度运行,因此就拥有更多的进程周期。一般用户只能降低它们自己进程的优先级别,并限于 0 到 19 之间。超级用户(root)可以将任何进程的优先级设定为任何值。

(3)查看进程优先级

通过htop命令查看进程状态信息时,可以看到其中有一列名为NI,NI指的就是优先级。

linux下进程管理1、linux下启动进程的两种方式:2、at命令 启动进程3、cron命令启动进程4、查看进程状态5、进程控制

(4)、指定(nice)、修改(renice)进程优先级的命令的使用方法

  • nice用法:指定将要运行的进程的优先级

    nice -n 优先级 command

    例如:nice -n 6 ./a.out 以优先级6来运行a.out

  • renice用法:用来修改进程的优先级

    renice 优先级 pid

    例如: renice +10 9621 将9621进程的优先级改为10

(5)其他命令

  • jobs

    查看当前有多少在后台运行的命令。

举栗子:在后台运行一个程序,该程序每5秒打印一次hello world! 此时执行 jobs 命令,可以看到该命令的执行信息。

![在这里插入图片描述](https://img-blog.csdnimg.cn/20200301225033479.png

  • &

    运行一个程序时,直接放到后台。

    举栗子:在后台运行了一个程序,该程序每隔5秒打印hello world! 这个时候按ctrl+z 没有任何反应。 当输入 fg 2 时,将程序有后台拖至前台运行,此时按ctrl+z 程序暂停。

    linux下进程管理1、linux下启动进程的两种方式:2、at命令 启动进程3、cron命令启动进程4、查看进程状态5、进程控制
  • Ctrl-Z

    将一个正在前台执行的进程放到后台,并且暂停。

举栗子:在终端运行一个程序,每隔5秒打印hello world! 当按下:ctrl + z 时

linux下进程管理1、linux下启动进程的两种方式:2、at命令 启动进程3、cron命令启动进程4、查看进程状态5、进程控制
  • fg命令

    将后台中的命令调至前台继续运行。如果后台中有多个命令,可以用 fg N将选中的命令调出,N是通过jobs命令查到的后台正在执行的命令的序号[N] (不是pid)。

  • bg命令

    将一个在后台暂停的命令,变成继续执行。如果后台中有多个命令,可以用bg N将选中的命令调出,N是通过jobs命令查到的后台正在执行的命令的序号(不是pid)。

继续阅读