linux下进程管理

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!
在这里插入图片描述注意: 由于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 命令,就可以看到等待执行的任务。
    在这里插入图片描述
  • atrm命令
    功能:删除系统中由at建立的正在等待被执行的任务。
    使用: $atrm 任务的工作号(工作号为第一个参数)
    在这里插入图片描述还是刚才额例子,这个时候在终端中键入 $ 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命令的基本语法
crontab -e    //编辑某个用户的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 保存退出。
在这里插入图片描述终端则会如有如下提示(代表你创建了一个周期性任务):
![在这里插入图片描述](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 设置
    在这里插入图片描述

  • 普通用户查看自己名下的任务(普通用户不指定 -u,只能查看自己的cron服务): crontab -l
    在这里插入图片描述

  • crontab -r //删除某个用户的cron服务
    例如:root用户删除yuanjianyu用户的cron服务。
    在这里插入图片描述
    注意:普通用户也可以自己删除自己额cron服务。

4、查看进程状态

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

  • ps命令是Process Status的缩写。
    ps命令用来列出系统中当前运行的那些进程。ps命令列出的是当前那些进程的照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信息,就可以使用top命令。
  • ps -aux
    Linux中可以使用ps -aux查看所有进程。
    在这里插入图片描述

快照中:

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

注意:

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

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

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

  • 图片中的信息在一直变化。
  • top的升级版本为htop,体验更好。

在这里插入图片描述

5、进程控制

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

  • 功能:向进程发送信号(包括暂停等信号)。
  • 通过kill -l查看kill所支持发送的信号。
    在这里插入图片描述
  • 通过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指的就是优先级。
在这里插入图片描述

(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 程序暂停。
    在这里插入图片描述

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

举栗子:在终端运行一个程序,每隔5秒打印hello world! 当按下:ctrl + z 时
在这里插入图片描述

  • fg命令
    将后台中的命令调至前台继续运行。如果后台中有多个命令,可以用 fg N将选中的命令调出,N是通过jobs命令查到的后台正在执行的命令的序号[N] (不是pid)。
  • bg命令
    将一个在后台暂停的命令,变成继续执行。如果后台中有多个命令,可以用bg N将选中的命令调出,N是通过jobs命令查到的后台正在执行的命令的序号(不是pid)。
posted @ 2020-03-01 23:04  江南又一春  阅读(308)  评论(0编辑  收藏  举报