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
保存退出。
终端则会如有如下提示(代表你创建了一个周期性任务):
![在这里插入图片描述](
(7)与cron 相关的其他命令
- crontab -u //设定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数 ,即root用户查看其他用户的cron 服务信息。-u在没指定的情况下,代表实际用户。如下
- root查看某用户的cron设置:crontab -u yuanjianyu -l
![在这里插入图片描述]( - 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 命令,可以看到该命令的执行信息。
![在这里插入图片描述](
- &
- 运行一个程序时,直接放到后台。
- 举栗子:在后台运行了一个程序,该程序每隔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)。