Gestion des processus et des tâches Linux (commande de processus d'affichage, processus de contrôle, gestion des tâches planifiées ponctuelles et périodiques)

Répertoire d'articles


Premièrement, regardez le processus

  • Un programme est une collection statique de code machine exécutable et de données (code stocké de manière statique dans un fichier) stockées sur un support de stockage externe (tel qu'un disque dur, un CD)
  • Un processus est un programme informatique qui est exécuté dynamiquement dans le processeur et la mémoire
  • Dans le système Linux, un ou plusieurs processus peuvent être créés après le démarrage de chaque programme

1. Afficher les informations de processus-ps

  • La commande ps est l'outil de visualisation de processus le plus courant dans les systèmes Linux. Elle est principalement utilisée pour afficher des instantanés statiques contenant des informations complètes sur chaque processus en cours d'exécution.
  • Grâce à différentes options de commande, vous pouvez afficher de manière sélective les informations de processus

1.1 Méthode 1: ps -aux

  • a: Afficher toutes les informations de processus sous le terminal actuel, y compris les processus d'autres utilisateurs. Lorsqu'il est combiné avec l'option "x", il affichera toutes les informations de processus dans le système
  • u: Sortie des informations de processus dans un format orienté utilisateur
  • x: afficher les informations process de l'utilisateur actuel dans tous les terminaux
  • Les informations de processus seront affichées sous la forme d'une simple liste
##例:
[root@localhost ~]# ps -aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  2.6  0.3  46344  6908 ?        Ss   16:47   0:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root          2  0.0  0.0      0     0 ?        S    16:47   0:00 [kthreadd]
root          3  0.0  0.0      0     0 ?        S    16:47   0:00 [kworker/0:0]
root          4  0.0  0.0      0     0 ?        S<   16:47   0:00 [kworker/0:0H]
##省略...
nom Explication
UTILISATEUR Utilisateur du processus
PID ID du processus
%CPU Le pourcentage de CPU occupé par le processus
%HOMMES Pourcentage de mémoire occupée
VSZ La quantité de mémoire virtuelle utilisée par le processus (Ko)
RSS La quantité de mémoire physique utilisée par le processus (Ko)
TYY Le nom du terminal qui a démarré le processus; si le processus n'est pas lancé à partir du terminal, il sera affiché sous la forme "?"
STAT L'état du processus (D: état dormant non interruptible; R: état en cours d'exécution; S: état dormant et peut être réveillé; s, processus parent; T: état arrêté, qui peut être suspendu en arrière-plan ou le processus est dans un état de débogage de suivi ; Z: processus zombie, le processus est terminé, mais la plupart des programmes sont toujours en mémoire; <: état de haute priorité; +: processus de premier plan) 7
DÉBUT Le processus a été déclenché à l'heure de début
TEMPS Le temps pendant lequel le processus utilise réellement le CPU pour s'exécuter
COMMANDER Commande de démarrage de processus
  • Explication du terme (processus zombie):
    un processus est terminé, mais il occupe toujours la mémoire, également appelée zombie

1.2 Méthode deux: ps -elf

  • e: afficher toutes les informations de processus dans le système
  • l: Afficher les informations de processus au format long
  • f: utiliser le format complet pour afficher les informations de processus
  • Affiche les informations de processus dans le système dans un format long et contient un contenu plus riche
##例:
[root@localhost ~]# ps -elf
F S UID         PID   PPID  C PRI  NI ADDR SZ WCHAN  STIME TTY          TIME CMD
4 S root          1      0  0  80   0 - 32068 ep_pol 16:47 ?        00:00:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
1 S root          2      0  0  80   0 -     0 kthrea 16:47 ?        00:00:00 [kthreadd]
1 S root          4      2  0  60 -20 -     0 worker 16:47 ?        00:00:00 [kworker/0:0H]
1 S root          5      2  0  80   0 -     0 worker 16:47 ?        00:00:00 [kworker/u256:0]
##省略...
nom Explication
F Balise système attribuée par le noyau au processus
S Statut du processus
UID L'utilisateur qui a lancé ces processus
PID ID de processus du processus
PPID Le numéro de processus du processus parent (si le processus a été démarré par un autre processus)
C Utilisation du processeur dans le cycle de vie d'un processus
PRI La priorité du processus (plus le nombre est élevé, plus la priorité est faible)
NI La valeur de modestie est utilisée pour participer à la détermination de la priorité
ADDR Adresse mémoire du processus
SZ Si le processus est remplacé, la taille approximative de l'espace d'échange requise
WCHAN Si le processus est en veille, affichez le nom de la fonction système en veille
ESTIMATIONS Heure système à laquelle le processus a commencé
ATS Terminal au démarrage du processus
TEMPS Temps processeur cumulé requis pour exécuter le processus
CMD Commande de démarrage de processus

Dans le système CentOs7, tty1 représente l'interface graphique, tty2-tty6 représente l'interface texte, vous pouvez utiliser Ctrl + Alt + (F1-F6) pour basculer

1.3 Autres exemples

  • Lors de l'exécution directe de la commande ps sans aucune option, seuls les processus ouverts dans la session utilisateur actuelle seront affichés
[root@localhost ~]# ps
   PID TTY          TIME CMD
  1803 pts/0    00:00:00 bash
  2219 pts/0    00:00:00 ps

  • En raison du grand nombre de processus en cours d'exécution dans le système, vous pouvez combiner des symboles de canal et des commandes grep pour filtrer lorsque vous avez besoin d'interroger les informations d'un certain processus
[root@localhost ~]# ps aux | grep bash        ##过滤出包含“bash”的信息
root        666  0.0  0.0 115408   940 ?        S    16:47   0:00 /bin/bash /usr/sbin/ksmtuned
root       1803  0.0  0.1 116328  3020 pts/0    Ss   16:47   0:00 -bash
root       2256  0.0  0.0 112828   976 pts/0    S+   17:10   0:00 grep --color=auto bash

2. Afficher les informations de processus en haut

  • Utilisez la commande ps pour afficher des informations de processus statiques et ne pouvez pas indiquer en permanence l'état de fonctionnement du processus en cours
  • Si vous souhaitez afficher les informations d'état de chaque processus dans un mode d'actualisation dynamique, vous pouvez utiliser cette commande
  • Actualiser toutes les trois secondes par défaut

2.1 Exemple de diagramme

[root@localhost ~]# top

marque

2.2 Informations sur les tâches système (première ligne) et processus (deuxième ligne)

Information connexe sens / /
18:55:08 Le temps du système Tâches Nombre total de processus
jusqu'à 2:07 Temps de fonctionnement du système fonctionnement Nombre de processus en cours
1 utilisateur Nombre d'utilisateurs actuellement connectés en train de dormir Nombre de processus de sommeil
charge moyenne : 0,00,0,01,0,05 Charge du système, c'est-à-dire le nombre de tâches traitées par le système dans une unité de temps. Les trois valeurs suivantes sont la valeur moyenne de 1 minute, 5 minutes et 15 minutes jusqu'à présent arrêté Nombre de processus abandonnés
/ / zombi Nombre de processus zombies

2.3 Informations sur le processeur (troisième ligne), la mémoire (quatrième ligne) et l'espace d'échange (cinquième ligne)

Information connexe sens / / / /
nous Occupation de l'utilisateur total Espace mémoire total total Espace de swap total
le sien Occupation du noyau libre Mémoire libre libre Espace swap gratuit
ni Occupation d'horaire prioritaire utilisé Mémoire utilisée utilisé Espace d'échange utilisé
id CPU inactif, pour comprendre le pourcentage de CPU inactif, voir principalement la partie% id buff / cahe La somme des tampons de la mémoire physique et de la mémoire d'échange dispo Mem Espace physique disponible
Washington E / S en attente d'être occupées / / / /
salut Occupation d'interruption de matériel / / / /
et Occupation d'interruption de logiciel / / / /
st Occupation de la virtualisation / / / /

2.4 Explication détaillée de chaque colonne dans la zone d'informations sur le processus

information Explication
PID ID de processus
UTILISATEUR Nom d'utilisateur du propriétaire du processus
PR priorité
NI Valeur de modestie, une valeur négative indique une priorité élevée, une valeur positive indique une faible priorité
VIRT La quantité totale de mémoire virtuelle utilisée par le processus, en Ko
RES La taille de la mémoire physique utilisée par le processus, en ko
SHR Taille de la mémoire partagée, unité Ko
S Statut du processus
%CPU Pourcentage de temps processeur entre la dernière mise à jour et le présent
% MEM Le pourcentage de mémoire physique utilisé par le processus
TEMPS + Le temps CPU total utilisé par le processus, en unités de 1/100 seconde
COMMANDER Nom de la commande / ligne de commande

2.5 Commandes TOP couramment utilisées

commander Explication
P Trier par pourcentage d'utilisation du processeur
M Trier par taille de mémoire résidente
N Trier par heure de début
c Bascule l'affichage du nom de la commande et de la ligne de commande complète
h Des informations d'aide en ligne pour le programme supérieur peuvent être obtenues
k Entrez le numéro PID du processus spécifié comme demandé et appuyez sur Entrée pour terminer le processus correspondant
q Quitter le programme supérieur
(Numéro 1 Afficher le numéro et l'état de la CPU

3. Afficher les informations de processus-pgrep

  • Lorsque vous utilisez la commande ps pour interroger un certain processus, il est souvent nécessaire de combiner la commande grep pour filtrer les résultats de sortie, mais c'est très peu pratique à utiliser, et la commande "pgrep" est un outil spécial utilisé pour interroger des informations de processus spécifiques
  • 查询进程名中包含“log”的进程及其PID号(若没有“-l”则只输出PID号)
[root@localhost ~]# pgrep -l "log"
288 xfs-log/sda2
477 xfs-log/sda1
481 xfs-log/sda5
595 systemd-logind
601 abrt-watch-log
628 abrt-watch-log
1028 rsyslogd
  • 还可以结合“-U”选项查询特定用户的进程、“-t”选项查询在特定终端运行的进程
##例如:查询由用户 teacher 在 tty1 终端上运行的进程及PID号
[root@localhost ~]# pgrep -l -U teacher -t tty2

4.查看进程树-pstree

  • pstree命令可以输出Linux系统中各进程的树形结构,更加直观地判断出各进程之间的相互关系(如父、子进程)
  • pstree命令默认情况下只显示各进程的名称,结合“-p”选项使用时可以同时列出对应的PID号
  • 结合“-u”选项可以列出对应的用户号
  • 结合“-a”选项可以列出完整的命令信息
  • 执行“pstree -aup”命令可以查看当前系统的进程树,包括各进程对应的PID号、用户名、完整命令等信息
  • 也可以只查看属于指定用户的进程树结构,只要指定用户名作为参数即可
[root@localhost ~]# pstree -ap teacher

二、控制进程

1.进程的启动方式

  • 在Linux系统中,可以由用户手工启动或者按预定计划调度启动新的进程

1.1 手工启动

  • 根据该进程是否需要占用当前命令终端,手工启动分为以下两类
  • 前台启动:用户输入命令,直接执行程序,但得等到该进程结束并退出才能继续执行其他命令
  • 后台启动:在命令行尾加入“&”符号;无需等待,适用于等待时间较长的操作
[root@localhost ~]# cp /dev/cdrom mycd.iso &
[1] 4226
##输出信息包括后台任务序号和PID号

1.2 调动启用进程

  • 在服务器维护工作中,经常需要执行一些比较费时而且较占用资源的任务(如数据备份),这些任务更适合在相对空闲的时候(如半夜)进行
  • 但这样需要用户进行事前调度安排并指定任务运行的时间
  • 调度启动的计划任务进程均在后台运行,不占用用户的命令终端
  • 使用“at”命令,设置一次性计划任务(如24:00分时重启网络服务)
  • 使用crontab命令,设置周期性计划任务(如每周五24:00时备份数据库)

2.进程的前后台调度

2.1 挂起当前进程

  • Ctrl+Z(组合键)
  • 将当前进程挂起,即调入后台并停止执行
[root@localhost ~]# jobs -l
[1]+  5449 停止                  vim /etc/sysconfig/network-scripts/ifcfg-ens33

2.2 查看后台的进程

  • jobs
  • 查看当前终端中在后台运行的进程任务;结合“-l”选项可以同时显示出该进程的PID号
[root@localhost ~]# jobs -l
[1]+  5449 停止                  vim /etc/sysconfig/network-scripts/ifcfg-ens33

2.3 将后台的进程恢复运行

  • bg:将后台暂停执行的任务恢复运行并继续在后台执行
  • fg:将后台暂停执行的任务恢复运行并恢复到前台运作
  • 除非后台中的任务只有一个,否则bg和fg命令都需要指定后台进程的任务编号作为参数
  • 例如:“fg 1(任务编号)”

3.终止进程执行

  • 当用户在前台执行某个进程时,可以用Ctrl+C组合键强制中断当前正在执行的命令

3.1 kill

  • kill用于终止指定PID号的进程,需要使用进程的PID号作为参数
[root@localhost ~]# pgrep -l "sshd"        ##查询目标进程PID号
1026 sshd
1798 sshd
[root@localhost ~]# kill 1026        ##终止指定PID的进程
[root@localhost ~]# pgrep -l "sshd"
1798 sshd        ##再查询时,发现1026没有了,进程已成功终止
  • 若该进程不响应终止信号,则结合“-9”选项可以强制终止
  • 强制终止可能导致数据丢失,慎用
[root@localhost ~]# vim tmpfile        ##打开vim并挂起以作测试

[1]+  已停止               vim tmpfile
[root@localhost ~]# jobs -l        ##查询目标进程PID号
[1]+  2028 停止                  vim tmpfile
[root@localhost ~]# kill 2028        ##尝试直接终止进程
[root@localhost ~]# jobs -l        ##查询后发现并未退出
[1]+  2028 停止                  vim tmpfile
[root@localhost ~]# kill -9 2028        ##结合“-9”选项试试,强制终止目标进程
[root@localhost ~]# jobs -l        ##没了,成功
[1]+  2028 已杀死               vim tmpfile

3.2 killall

  • 用于结束系统中多个相关名称的进程
  • 也可以结合“-9”选项
  • 例:执行“killall -9 vim”命令可将所有名为vim的进程全部强行终止
[root@localhost ~]# vim testfile1

[1]+  已停止               vim testfile1
[root@localhost ~]# vim testfile2

[2]+  已停止               vim testfile2
[root@localhost ~]# vim testfile3

[3]+  已停止               vim testfile3
[root@localhost ~]# jobs -l
[1]   2130 停止                  vim testfile1
[2]-  2131 停止                  vim testfile2
[3]+  2132 停止                  vim testfile3
[root@localhost ~]# killall -9 vim
[1]   已杀死               vim testfile1
[2]-  已杀死               vim testfile2
[3]+  已杀死               vim testfile3

3.3 pkill

  • 根据进程的名称、运行该进程的用户、进程所在的终端等多种属性终止特定的进程
  • 与“pgrep”命令选项类似,如“-U(指定用户名)”、“-t(指定终端)”

三、一次性计划任务-at

  • 设置一次性计划时,在at命令中依次指定计划执行任务的时间、日期作为参数
  • 确认后进入带“at>”提示符的任务编辑器界面,每行设置一条执行命令,可以依次设置多条语句,最后按Ctrl+D组合键提交任务
  • 注:计划执行任务的时间、日期必须安排在当前系统时间之后
  • 对应条件:对应系统服务为atd,必须已经运行
  • 示例:
##设置在当天的20:00时关机
[root@localhost ~]# at 20:00
at> init 0<EOT>        ##Ctrl+D组合键提交任务(按2次)
job 7 at Tue Dec  1 20:00:00 2020
  • “atq”命令可以进行查询,已执行过的不会再出现在列表中
[root@localhost ~]# atq
7	Tue Dec  1 20:00:00 2020 a root
  • "atrm"命令可以删除指定编号的at任务
[root@localhost ~]# atrm 7
[root@localhost ~]# atq
[root@localhost ~]# 

四、计划任务管理-crontab

  • 使用crontab命令设置的计划任务可以按预设的周期重复执行,可以大大减轻设置重复性系统管理任务的操作
  • 由软件包cronie提供crontab工具、系统服务crond和配置文件/etc/crontab
  • 前提条件:对应的系统服务crond必须已经运行

1.配置文件和目录

  • crond通过多个目录和文件设置计划任务,不同类型的任务由不同的配置文件来设置

1.1 系统任务配置文件,位于文件:/etc/crontab

  • 设置的是维护Linux系统所需的任务,由Linux系统及相关程序在安装时自动设置,不建议用户修改

1.2 Les paramètres par défaut du système, situés dans le répertoire: /etc/cron.*/

  • Une fois le package crontabs installé, certains répertoires de tâches planifiées définis par le système par défaut seront promus dans ce répertoire, et le travail effectué par le système chaque heure et chaque jour est défini.

1.3 Paramètres définis par l'utilisateur, situés dans le fichier: / var / spool / cron /

  • Le plan cron défini par l'utilisateur à l'aide de la commande crontab sera enregistré dans ce répertoire (un fichier avec le même nom d'utilisateur sera généré dans ce répertoire)

2. Gérez les tâches planifiées de crontab

  • -u: spécifie à quel utilisateur appartient la tâche planifiée. Par défaut, elle est destinée à l'utilisateur actuel (soi-même); en général, seul l'utilisateur root est autorisé à utiliser cette option
  • Modifier la tâche planifiée
    crontab -e [-u nom d'utilisateur] (lorsqu'il n'y a pas de -u, l'objet par défaut est l'utilisateur actuel)
  • Afficher la tâche planifiée
    crontab -l [-u username]
  • Supprimer la tâche planifiée
    crontab -r [-u username]

3. Le format de la configuration des tâches crontab

marque

Champ La description
minute La valeur est n'importe quel entier de 0 à 59
heure La valeur est n'importe quel entier de 0 à 23
Date La valeur est n'importe quel entier de 1 à 31
mois La valeur est n'importe quel entier de 1 à 12
la semaine La valeur est n'importe quel entier de 0 à 7, 0 ou 7 représente dimanche
commander Commande ou script de programme à exécuter
  • Rappelez-vous la formule (gardez à l'esprit):
    jour, mois et semaine en temps partagé

4. Méthode de représentation spéciale de la valeur temporelle

  • "*" signifie à tout moment dans la plage
  • "," désigne plusieurs points temporels discrets dans un intervalle
  • "-" désigne une plage de temps continue
  • "/" indique la fréquence temporelle de l'intervalle
  • Exemple:
0 17 * * 1-5          ##周一到周五每天17:00
30 8 * * 1,3,5        ##每周(一、三、五)的8:30
0 8-18/2 * * *        ##8点到18点之间每2个小时
0 * */3 * *           ##每3天
  • Étant donné qu'aucune connexion utilisateur n'est requise pour effectuer des tâches, il est recommandé d'utiliser des chemins absolus pour éviter la situation où les commandes ne peuvent pas être exécutées en raison du manque de chemins d'exécution
  • Lors de la définition de la tâche à exécuter toutes les minutes, le champ "minute" doit également être rempli avec une valeur de temps spécifique au lieu de la valeur par défaut "*", sinon la tâche sera exécutée toutes les minutes

5. Autre

  • L'option "-l" du jeu de commandes crontab permet d'afficher la liste des tâches planifiées de l'utilisateur actuel. Pour les utilisateurs root, vous pouvez également combiner l'option "-u" pour afficher les tâches planifiées des autres utilisateurs.
  • Lorsque vous devez supprimer une tâche planifiée, vous pouvez la modifier avec l'option "-e"
  • Autres exemples:
5 * * * * ls        ##每个小时的第5分钟执行一次ls命令
30 5 * * * ls       ##每天的5:30执行ls命令
30 7 8 * * ls       ##每个月8号的7:30执行ls命令
30 5 8 6 * ls       ##每个6月8号的5:30执行ls命令
30 6 * * 0 ls       ##每个周日的6:30执行ls命令
30 3 10,20 * * ls   ##每个月10号和20号的3:30执行ls命令
25 8-11 * * * ls    ##每天8点到11点的第25分时执行ls命令
*/15 * * * * ls     ##每隔15分钟执行一次ls命令
30 6 */10 * * ls    ##月中的每隔10天的6:30时执行一次ls命令

Je suppose que tu aimes

Origine blog.csdn.net/weixin_51486343/article/details/110439089
conseillé
Classement