• 【Linux】补充:进程管理之手动控制进程,以及计划任务


    目录

    一、手动启动进程

    1、理解前台启动与后台启动

    2、如何完成前台启动后台启动的切换

    3、完成并行执行多个任务

    4、结束进程

    1、kill 

    2、killall

    2、pkill

    二、计划任务

    1、at一次性计划任务

    2、实操

    2、周期性计划任务

    1、关于设置周期性任务的配置文件以及格式

    2、设置周期性任务的方法以及命令

    实操案例:14点每分钟创建一个在同名时间文件名


    一、手动启动进程

    1、理解前台启动与后台启动

    前台启动:通过终端启动,且启动后一直占据终端,终端不可以干别的事

    后台启动:可通过终端启动,但启动后即转入后台运行(释放终端),终端可以干别的事

    两者可以切换

    2、如何完成前台启动后台启动的切换

    采用“命令&”可以将进程放到后台执行

    1. ##命令dd &将其放到后台执行,并给到一个进程pid号
    2. [root@localhost opt]#dd if=/dev/zero of=/opt/bigfile &
    3. [1] 13991
    4. ##查看当前后台的任务状态:jobs
    5. [root@localhost opt]#jobs
    6. [1]+ 运行中 dd if=/dev/zero of=/opt/bigfile &
    7. ##查看当前后台的任务状态以及pid号:jobs -l
    8. [root@localhost opt]#jobs -l
    9. [1]+ 13991 运行中 dd if=/dev/zero of=/opt/bigfile &
    10. ##将后台的任务放到前台运行:fg +任务的序号
    11. [root@localhost opt]#fg 1
    12. dd if=/dev/zero of=/opt/bigfile
    13. ^Z
    14. [1]+ 已停止 dd if=/dev/zero of=/opt/bigfile
    15. ###ctrl + z将前台的任务停止并挂起,处于停止,但是还在
    16. ##看下任务的状态区别
    17. [root@localhost opt]#jobs
    18. [1]+ 已停止 dd if=/dev/zero of=/opt/bigfile
    19. ##再次启动挂起的任务 :bg +任务序号
    20. [root@localhost opt]#bg 1
    21. [1]+ dd if=/dev/zero of=/opt/bigfile &
    22. ##再看一下状态
    23. [root@localhost opt]#jobs
    24. [1]+ 运行中 dd if=/dev/zero of=/opt/bigfile &

    3、完成并行执行多个任务

    比如想要同时与三台主机ping

    ping 127.0.0.1 & ping www.baidu.com & ping  192.168.20.10 &

    4、结束进程

    1、kill 

    号代号信号名称说 明
    0EXIT程序退出时收到该信息。
    1HUP该信号让进程立即关闭.然后重新读取配置文件之后重启
    2INT程序中止信号,用于中止前台进程。相当于输出 Ctrl+C 快捷键
    3QUIT退出
    8FPE在发生致命的算术运算错误时发出。不仅包括浮点运算错误,还包括溢出及除数为 0 等其他所有的算术运算错误
    9KILL用来立即结束程序的运行。本信号不能被阻塞、处理和忽略。般用于强制中止进程
    14ALRM时钟定时信号,计算的是实际的时间或时钟时间。alarm 函数使用该信号
    15TERM正常结束进程的信号,kill 命令的默认信号。如果进程已经发生了问题,那么这 个信号是无法正常中止进程的,这时我们才会尝试 SIGKILL 信号,也就是信号 9
    18CONT该信号可以让暂停的进程恢复执行。本信号不能被阻断
    19STOP该信号可以暂停前台进程,相当于输入 Ctrl+Z 快捷键。本信号不能被阻断

    2、killall

    命令不再依靠 PID 来杀死单个进程,而是通过程序的进程名来杀死一类进程,比如杀死ping 

    把与ping相关的进程全部杀死:killall  ping

    2、pkill

    1. pkill [-t 终端号] 进程名
    2. -U:根据进程所属的用户名终止相应进程
    3. -t:根据进程所在的终端终止相应进程
    4. -SIGNAL
    5. -u uid: effective user,生效者
    6. -U uid: real user,真正发起运行命令者 ##pkill -U zhangsan 把zhangsan用户清退
    7. -t terminal: 与指定终端相关的进程
    8. -l: 显示进程名(pgrep可用)
    9. -a: 显示完整格式的进程名(pgrep可用)
    10. -P pid: 显示指定进程的子进程
    11. w
    12. #使用w命令查询本机已经登录的用户
    13. pkill -9 -t pts/1
    14. #强制杀死从pts/1虚拟终端登陆的进程

    二、计划任务

    1、at一次性计划任务

    • 由包 at 提供
    • 依赖与atd服务,需要启动才能实现at任务
    • at队列存放在/var/spool/at目录中,ubuntu存放在/var/spool/cron/atjobs目录下
    • 执行任务时PATH变量的值和当前定义任务的用户身份一致

    2、实操

    1. ##一次性任务的格式
    2. at [xx:xx] [xxx-xx-xx]
    3. #交互第一步,写任务内容
    4. 普通命令或者脚本
    5. ##提交
    6. ctrl + d
    7. ##查询(这里有个缺点,并不能查看具体的任务)
    8. atq
    9. ##删除任务
    10. atrm 任务序号

    2、周期性计划任务

    1、关于设置周期性任务的配置文件以及格式

    是由/etc/crontab配置文件,表明了周期性任务的书写格式,这个文件是个全局配置文件,写了以后是可以全局生效的

    书写crontab时,需要注意的几项格式:

    1、6个选项都不能为空,不确定就用*代替,注意注意,第一项为分钟,这个一定要想清楚,*是每分钟,0是整点,最好具体到时间,要不然就是每分钟执行一次,想清楚需求;

    2、最小的单位是分钟,所以精确秒做不到!!

    3、在定义时间的时候,注意星期和日期区别,容易混淆;

    4、在定任务的时候,注意命令使用绝对路径!!!

    2、设置周期性任务的方法以及命令

    1. ##方法一:
    2. vim /etc/crontab
    3. ##方法二:
    4. crontab命令
    5. crontab -e #创建周期性计划
    6. crontab -l #查看当前周期性计划
    7. crontab -r #删除计划任务 注意,删除的时候一次性全删了!!!
    8. crontab -u 用户名 -e #针对用户创建周期性任务
    选项功能
     -u 用户名 用来设定某个用户的 crontab 服务,例如 "-u demo" 表示设备 demo 用户的 crontab 服务,此选项一般有 root 用户来运行。
     -e   编辑某个用户的 crontab 文件内容。如果不指定用户,则表示编辑当前用户的 crontab 文件。 
     -l  显示某用户的 crontab 文件内容,如果不指定用户,则表示显示当前用户的 crontab 文件内容。 
     -r 

    注意;这里删了就全删了,建议用crontab -e进入编辑页面删除单条 

    从 /var/spool/cron 删除某用户的 crontab 文件,如果不指定用户,则默认删除当前用户的 crontab 文件。 

     -i  在删除用户的 crontab 文件时,给确认提示。                    

    实操案例:14点每分钟创建一个在同名时间文件名

    1. [root@localhost opt]#crontab -l
    2. * 14 * * * /bin/touch /opt/`date +\%F_\%T`

    补充:

    特殊字符的含义
    项目含义范围
    第一个"*"一小时当中的第几分钟(minute)0~59
    第二个"*"一天当中的第几小时(hour)0~23
    第三个"*"一个月当中的第几天(day)1~31
    第四个"*"一年当中的第几个月(month)1~12
    第五个"*"一周当中的星期几(week)0~7(0和7都代表星期日)
    特殊字符的含义
     特殊符号     含义                                                         
     *(星号)    代表任何时间。比如第一个"*"就代表一小时种每分钟都执行一次的意思。 
     ,(逗号)    代表不连续的时间。比如"0 8,12,16***命令"就代表在每天的 8 点 0 分、12 点 0 分、16 点 0 分都执行一次命令。 
     -(中杠)    代表连续的时间范围。比如"0 5 ** 1-6命令",代表在周一到周六的凌晨 5 点 0 分执行命令。 
     /(正斜线)  代表每隔多久执行一次。比如"*/10****命令",代表每隔 10 分钟就执行一次命令。 

    拓展练习:

    1、每月的 1号 15号  30号

    0  0 1,15,30 * *

    2、中午  12点  -  16点 

    0  12-16  *  * *

    3、每  半小时 执行  一次

    30 * * * *

    4、每两分钟执行脚本

    */2  *  *  *  *

    5、8点到18点之间每2小时  

    0 8-18/2  * * *

    6、每3天的每个整点

    0  0  */3  *  *

    7、每个月 1号  ,5 号 ,15号,  30号   下午 3到6点  执行

    0  15-16  1,5,15,30 * *

    8、每年1-5月每隔10天的上午和下午10点的10-45分内每隔5分钟执行一次

    10-45/5  10,22  */10  1-5  *

    9、每周五晚上8点整执行

    0  20  *   *   5

    8、每周日凌晨2点30执行一次

    30  2  *  * 0

    30  2  *  * 7

    3、补充一点

    实操修改了配置文件/etc/crontab文件,也是可以设置计划任务的,但是

    ①需要完全按照格式,需要指定用户

    ②不能使用命令crontab -l查看任务

    所以建议不要使用

  • 相关阅读:
    木舟0基础学习Java的第十六天(异常,分类,自定义异常,注意事项)
    微积分在神经网络中的本质
    【CVPR 2021】Cylinder3D:用于LiDAR点云分割的圆柱体非对称3D卷积网络
    证券期货业数据分类分级指引
    Tomcat多实例、负载均衡、动静分离
    ES数据的导出与导入
    SQL多表设计--一对多(外键)
    Linux内核中竞态学习过程的问题
    做好规划 拿下未来!
    智慧矿山:运料车自动开门识别AI算法
  • 原文地址:https://blog.csdn.net/liu_xueyin/article/details/134264833