Ceci est une ancienne révision du document !
Table des matières
Dernière mise-à-jour : 2020/01/30 03:36
SO205 - Gestion des Processus et des Tâches
Gestion des Processus
Un processus est un fichier binaire ( binary file ) qui est chargé en mémoire centrale. Une fois chargé la mémoire exécute le programme en langage machine. Quand le programme est chargé, il a besoin du système d’exploitation qui lui fournit des informations pour qu’il puisse s’exécuter correctement. Ces informations sont appelées des données d’identification.
L’ensemble des données d’identification est appelé l’environnement de processus :
- Un numéro de processus unique (PID),
- Un numéro de processus parent (PPID),
- Un numéro d'utilisateur (UID),
- Un numéro de groupe (GID),
- La durée de traitement,
- La priorité du processus,
- Le répertoire de travail actif,
- Les fichiers ouverts.
Ces informations sont stockés dans le répertoire /proc.
Système de fichiers /proc
Le répertoire /proc contient des fichiers et des répertoires virtuels. Le contenu de ces fichiers est créé dynamiquement lors de la consultation. Seul root peut consulter la totalité des informations dans le répertoire /root.
Pour commencer l'étude de /proc, saisissez la commande suivante :
# cd /proc; ls -d [0-9]* [Entrée]
Vous obtiendrez un résultat simialire à celui-ci :
# cd /proc; ls -d [0-9]* 0 1028 121 1296 1577 1652 370 397 432 543 570 596 659 718 724 893 928 949 984 1 1038 124 1321 1578 183 373 398 435 544 583 599 670 719 795 9 930 956 996 1006 1046 126 1322 1646 2 374 419 519 551 584 603 671 720 800 905 933 958 1016 1079 1275 140 1650 3 391 421 52 562 594 607 7 721 875 913 935 960 1026 1080 1290 1550 1651 367 392 431 520 568 595 608 709 723 890 925 937 961
Chaque répertoire fait référence à un PID d'un processus.
Commencez par regarder le contenu du répertoire 1.
#cd 1; ls -l [Entrée]
Vous obtiendrez un résultat similaire à celui-ci :
# cd 1; ls -l total 4417 -rw------- 1 root root 2211840 mars 17 09:23 as -r-------- 1 root root 168 mars 17 09:23 auxv dr-x------ 2 root root 48 mars 17 09:23 contracts -r-------- 1 root root 32 mars 17 09:23 cred --w------- 1 root root 0 mars 17 09:23 ctl lr-x------ 1 root root 0 mars 17 09:23 cwd -> dr-x------ 2 root root 8208 mars 17 09:23 fd -r-------- 1 root root 0 mars 17 09:23 ldt -r--r--r-- 1 root root 120 mars 17 09:23 lpsinfo -r-------- 1 root root 816 mars 17 09:23 lstatus -r--r--r-- 1 root root 536 mars 17 09:23 lusage dr-xr-xr-x 3 root root 64 mars 17 09:23 lwp -r-------- 1 root root 4320 mars 17 09:24 map dr-x------ 2 root root 800 mars 17 09:23 object -r-------- 1 root root 5104 mars 17 09:23 pagedata dr-x------ 2 root root 9008 mars 17 09:23 path -r-------- 1 root root 72 mars 17 09:23 priv -r--r--r-- 1 root root 336 mars 17 09:23 psinfo -r-------- 1 root root 4320 mars 17 09:23 rmap lr-x------ 1 root root 0 mars 17 09:23 root -> -r-------- 1 root root 1536 mars 17 09:23 sigact -r-------- 1 root root 1136 mars 17 09:23 status -r--r--r-- 1 root root 256 mars 17 09:23 usage -r-------- 1 root root 0 mars 17 09:23 watch -r-------- 1 root root 6840 mars 17 09:23 xmap
Les Types de Processus
Il existe trois types de processus :
- interactif qui est lancé par le shell dans une console en premier plan ou en tâche de fond
- batch qui est lancé par le système au moment propice
- daemon qui est lancé au démarrage par le système ( lpd, dns etc )
Un processus peut être dans un de neuf états ou process states :
<note important>
- user mode - le processus s'exécute en mode utilisateur,
- kernel mode- le processus s'exécute en mode noyau,
- waiting – le processus est en attente pour une ressource autre que le processeur,
- sleeping - le processus est endormi,
- runnable – le processus dispose de toutes le ressources nécessaire à son exécution sauf le processeur,
- swap - le processus est endormi dans la mémoire virtuelle,
- new - le processus est nouveau,
- elected – le processus a le contrôle du processeur,
- zombie – le processus a terminé son exécution et est prêt à mourir.
</note>
Les Commandes relatives aux Processus
La commande ps
Cette commande affiche les processus de l’utilisateur attaché au terminal
# ps PID TTY TIME CMD 1607 pts/4 0:00 ps 1577 pts/4 0:00 sh 1578 pts/4 0:00 sh
Utilisez avec l'option f, vous obtiendrez la table des processus :
# ps -f
UID PID PPID C STIME TTY TIME CMD
root 1608 1578 1 17:51:34 pts/4 0:00 ps -f
root 1577 1321 0 17:47:17 pts/4 0:00 sh
root 1578 1577 0 17:47:21 pts/4 0:00 -sh
Dans la table des processus sont stockés les données des processus en cours. On note :
| UID | User ID | Numéro de l’Utilisateur |
|---|---|---|
| PID | Process Indentification | Numéro Unique de Processus |
| PPID | Parent Process ID | PID du processus parent |
| C | Priority | Priorité instantanée |
| STIME | Start Time | Heure de démarrage |
| TTY | Terminal | Terminal parent |
| TIME | Duration | Durée |
| CMD | Command | Commande |
Pour visualiser la table des processus de tout le monde, utilisez la commande ps avec les options -f et -e :
# ps -fe
UID PID PPID C STIME TTY TIME CMD
root 0 0 0 09:23:05 ? 0:24 sched
root 1 0 0 09:23:06 ? 0:04 /sbin/init
root 2 0 0 09:23:06 ? 0:00 pageout
root 3 0 0 09:23:06 ? 1:16 fsflush
root 52 1 0 09:23:25 ? 0:00 /sbin/dhcpagent
root 7 1 0 09:23:09 ? 0:24 /lib/svc/bin/svc.startd
root 9 1 0 09:23:10 ? 1:01 /lib/svc/bin/svc.configd
root 398 1 0 09:24:19 ? 0:12 /usr/lib/inet/inetd start
root 583 1 0 09:24:43 ? 0:00 /usr/lib/snmp/snmpdx -y -c /etc/snmp/conf
daemon 370 1 0 09:24:17 ? 0:01 /usr/lib/nfs/nfsmapid
root 183 1 0 09:23:47 ? 0:00 /usr/lib/picl/picld
root 419 1 0 09:24:20 ? 0:01 /usr/lib/utmpd
root 397 392 0 09:24:19 ? 0:00 /usr/lib/saf/ttymon
daemon 374 1 0 09:24:17 ? 0:00 /usr/lib/nfs/nfs4cbd
daemon 367 1 0 09:24:17 ? 0:00 /usr/sbin/rpcbind
root 126 1 0 09:23:40 ? 2:00 /usr/sbin/nscd
root 140 1 0 09:23:41 ? 0:00 /usr/lib/power/powerd
daemon 121 1 0 09:23:39 ? 0:00 /usr/lib/crypto/kcfd
root 431 1 0 09:24:21 ? 0:00 /usr/sadm/lib/smc/bin/smcboot
root 124 1 0 09:23:39 ? 0:00 /usr/lib/sysevent/syseventd
root 543 1 0 09:24:39 ? 0:00 /usr/sbin/vold -f /etc/vold.conf
daemon 391 1 0 09:24:18 ? 0:00 /usr/lib/nfs/lockd
root 392 7 0 09:24:19 ? 0:00 /usr/lib/saf/sac -t 300
daemon 373 1 0 09:24:17 ? 0:00 /usr/lib/nfs/statd
root 519 1 0 09:24:38 ? 0:00 /usr/lib/autofs/automountd
webservd 595 584 0 09:24:44 ? 0:00 /usr/apache2/bin/httpd -k start
root 421 7 0 09:24:21 console 0:00 /usr/lib/saf/ttymon -g -d /dev/console -l console -m ldterm,ttcompat -h -p unkn
nobody 721 709 0 09:24:52 ? 0:00 /usr/apache/bin/httpd
root 432 431 0 09:24:21 ? 0:00 /usr/sadm/lib/smc/bin/smcboot
root 435 431 0 09:24:21 ? 0:00 /usr/sadm/lib/smc/bin/smcboot
root 520 519 0 09:24:38 ? 0:01 /usr/lib/autofs/automountd
root 709 1 0 09:24:51 ? 1:00 /usr/apache/bin/httpd
nobody 720 709 0 09:24:52 ? 0:00 /usr/apache/bin/httpd
webservd 594 584 0 09:24:44 ? 0:00 /usr/apache2/bin/httpd -k start
webservd 596 584 0 09:24:44 ? 0:00 /usr/apache2/bin/httpd -k start
root 568 1 0 09:24:42 ? 0:03 /usr/sfw/sbin/snmpd
root 1296 1290 7 15:21:50 ? 9:23 /usr/lib/firefox/firefox-bin -UILocale fr-FR -contentLocale FR
root 1290 1275 0 15:21:50 ? 0:00 /bin/sh /usr/lib/firefox/run-mozilla.sh /usr/lib/firefox/firefox-bin -UILocale
root 544 1 0 09:24:40 ? 0:01 /usr/sbin/syslogd
root 551 1 0 09:24:40 ? 0:00 /usr/lib/ssh/sshd
root 570 1 0 09:24:42 ? 0:08 /usr/lib/fm/fmd/fmd
root 562 1 0 09:24:41 ? 0:00 devfsadmd
nobody 723 709 0 09:24:53 ? 0:00 /usr/apache/bin/httpd
root 584 1 0 09:24:43 ? 0:56 /usr/apache2/bin/httpd -k start
root 928 1 0 09:25:30 pts/2 0:00 /usr/bin/gnome-keyring-daemon
webservd 599 584 0 09:24:44 ? 0:00 /usr/apache2/bin/httpd -k start
root 607 1 0 09:24:45 ? 0:00 /usr/lib/dmi/snmpXdmid -s unknown
webservd 608 584 0 09:24:45 ? 0:00 /usr/apache2/bin/httpd -k start
root 603 1 0 09:24:45 ? 0:00 /usr/lib/dmi/dmispd
root 935 1 0 09:25:33 ? 0:11 gnome-smproxy --sm-client-id default0
root 671 659 9 09:24:48 ? 11:12 /usr/X11/bin/Xorg :0 -depth 24 -nobanner -auth /var/dt/A:0-nGaysb
root 930 1 0 09:25:30 pts/2 0:35 xscreensaver -nosplash
root 724 659 0 09:24:53 ? 0:00 /usr/dt/bin/dtlogin -daemon
root 659 1 0 09:24:47 ? 0:00 /usr/dt/bin/dtlogin -daemon
root 670 659 0 09:24:48 ?? 0:00 /usr/openwin/bin/fbconsole -n -d :0
root 890 800 0 09:25:21 pts/2 0:00 /usr/dt/bin/sdt_shell -c unset DT; DISPLAY=:0; /usr/dt/bin/dt
nobody 718 709 0 09:24:52 ? 0:00 /usr/apache/bin/httpd
nobody 719 709 0 09:24:52 ? 0:00 /usr/apache/bin/httpd
root 800 724 0 09:25:14 ? 0:00 /bin/ksh /usr/dt/bin/Xsession
root 1321 1 2 15:23:25 ? 1:30 gnome-terminal
root 949 1 1 09:25:36 ? 0:26 /usr/bin/metacity --sm-client-id=default1
noaccess 795 1 0 09:25:06 ? 11:16 /usr/java/bin/java -server -Xmx128m -XX:+BackgroundCompilation -XX:PermSize=32m
root 875 1 0 09:25:20 ? 0:07 /usr/dt/bin/dsdm
root 925 1 1 09:25:27 pts/2 2:30 /usr/lib/gconfd-2 15
root 893 890 0 09:25:21 pts/2 0:00 -sh -c unset DT; DISPLAY=:0; /usr/dt/bin/dtsession_res -merge
root 1046 1 0 09:25:49 ? 32:53 /usr/jdk/latest/bin/java -version:1.5+ -jar /usr/lib/patch/swupna.jar -wait
root 933 1 0 09:25:30 ? 0:01 /usr/lib/bonobo-activation-server --ac-activate --ior-output-fd=23
root 905 893 0 09:25:23 pts/2 0:00 /bin/ksh /usr/dt/config/Xsession2.jds
root 913 905 0 09:25:23 pts/2 0:06 /usr/bin/gnome-session
root 937 1 0 09:25:33 ? 0:09 /usr/lib/gnome-settings-daemon --oaf-activate-iid=OAFIID:GNOME_SettingsDaemon -
root 956 1 1 09:25:37 ? 3:10 gnome-panel --sm-client-id default2
root 961 960 0 09:25:38 ? 0:00 gnome-volcheck -i 30 -z 3 -m cdrom,floppy,zip,jaz,dvdrom --sm-client-id default
root 958 1 1 09:25:37 ? 0:37 nautilus --no-default-window --sm-client-id default3
root 960 1 0 09:25:38 ? 0:04 gnome-volcheck -i 30 -z 3 -m cdrom,floppy,zip,jaz,dvdrom --sm-client-id default
root 1322 1321 0 15:23:26 ? 0:00 gnome-pty-helper
root 984 1 0 09:25:41 ? 0:29 /usr/lib/gnome-vfs-daemon --oaf-activate-iid=OAFIID:GNOME_VFS_Daemon_Factory --
root 1016 1 1 09:25:45 ? 0:26 /usr/lib/wnck-applet --oaf-activate-iid=OAFIID:GNOME_Wncklet_Factory --oaf-ior-
root 996 1 0 09:25:42 ? 0:24 /usr/lib/mapping-daemon
root 1028 1 2 09:25:47 ? 7:21 /usr/lib/mixer_applet2 --oaf-activate-iid=OAFIID:GNOME_MixerApplet_Factory --oa
root 1006 1 0 09:25:44 ? 0:07 /usr/lib/clock-applet --oaf-activate-iid=OAFIID:GNOME_ClockApplet_Factory --oaf
root 1275 1 0 15:21:49 ? 0:00 /bin/sh /usr/bin/firefox
root 1026 1 1 09:25:46 ? 3:19 /usr/lib/gnome-netstatus-applet --oaf-activate-iid=OAFIID:GNOME_NetstatusApplet
root 1038 1 0 09:25:48 ? 0:04 /usr/lib/notification-area-applet --oaf-activate-iid=OAFIID:GNOME_NotificationA
root 1079 1 0 09:25:55 ? 0:24 /usr/lib/sendmail -bd -q15m
smmsp 1080 1 0 09:25:55 ? 0:00 /usr/lib/sendmail -Ac -q15m
root 1550 1 0 17:41:18 ? 0:00 /usr/sbin/cron
root 1609 1578 1 17:52:17 pts/4 0:00 ps -fe
root 1577 1321 0 17:47:17 pts/4 0:00 sh
root 1578 1577 0 17:47:21 pts/4 0:00 -sh
Les commandes fg et bg
Normalement les commandes s’exécutent en avant plan. Vous pouvez également lancer des processus en arrière plan ou en tâche de fond. La gestion des tâches de fond n'est pas possible en sh. Vous devez donc passez en ksh ou bash. Si vous lancez une commande en tâche de fond, il faut rajouter (espace)& à la fin de la commande
# /usr/bin/ksh [Entrée]
# sleep 9999 & [Entrée]
<note important> Notez qu’un processus en arrière plan est dit asynchrone car il se poursuit indépendamment de son parent qui est le shell. En avant plan le processus est dit synchrone. </note>
Solaris numérote tous les processus qui sont placés en tâches de fond. On parle donc d’un numéro de tâche.
La commande jobs permet de se renseigner sur les processus en arrière plan.
# jobs -l [1] + 1646 Exécution en cours sleep 9999 &
<note important> Le numéro de tâche est indiqué entre [crochets] tandis que le PID ne l'est pas. </note>
Si on souhaite envoyer un processus en arrière plan de façon à libérer le shell pour d’autres commandes, il faut d’abord suspendre le processus en question. Normalement on suspend un processus en utilisant la combinaison de touches ^Z.
Pour mieux comprendre, lancez la commande suivante dans une autre fenêtre de console :
# /usr/bin/ksh [Entrée]
# sleep 1234 [Entrée]
Ensuite suspendez ce processus à l'aide de ^Z :
# /usr/bin/ksh # sleep 1234 ^Z[1] + Arrêté (SIGTSTP) sleep 1234 # jobs -l [1] + 1652 Arrêté (SIGTSTP) sleep 1234
Un fois suspendu, on utilise la commande bg (background) pour envoyer le processus en arrière plan :
# bg %n° de tâche [Entrée]
Une fois en arrière plan, le processus continue.
# bg %1 [1] sleep 1234& # jobs -l [1] + 1652 Exécution en cours sleep 1234
Pour ramener le processus en avant plan, il faut de nouveau interrompre le processus concerné. Or cette fois-ci, nous ne pouvons pas utiliser la commande ^Z. Il faut utiliser la commande kill avec l’opérateur –stop.
# kill -s stop %n° de tâche [Entrée]
# kill -s stop %1 # jobs -l [1] + 1652 Arrêté (SIGSTOP) sleep 1234
<note important> Notez bien l'utilisation de la commande jobs -l pour se renseigner sur l'état du processus concerné. </note>
Pour ramener le processus en avant plan, on utilise la commande fg :
# fg %n° de tâche [Entrée]
# fg %1 sleep 1234
La commande wait
Cette commande permet de transformer une commande asynchrone en synchrone. Elle est utilisée pour attendre jusqu’à ce que les processus en tâches de fond soient terminés :
# wait %n° de tâche [Entrée]
Par exemple :
# jobs -l [1] + 1646 Exécution en cours sleep 9999 & # wait %1
La commande nice
Cette commande modifie la priorité d’un processus. La priorité par défaut de nice est 20. La plage des valeurs de NOMBRE est de 0 à 40 où 0 est la plus prioritaire. La syntaxe de cette commande est :
# nice -n +/-NOMBRE COMMANDE
La commande renice
Cette commande modifie la priorité d’un processus déjà en cours. La valeur de la priorité ne peut être modifiée que par le propriétaire du processus ou par root. La syntaxe de cette commande est :
# renice -n +/-NOMBRE -p PID
La plage des valeurs de NOMBRE est de 0 à 39. La valeur de NOMBRE est ajouter ou déduit de la valeur par défaut, soit 20.
<note important> Il est à noter que seul root peut décrémenter la valeur de priorité avec la commande renice. </note>
La commande nohup
Cette commande permet à un processus de poursuivre son exécution après la déconnexion. Un processus enfant meurt quand le processus parent meure ou se termine. Comme une connexion et un processus, quand vous vous déconnectez, vos processus se terminent. Pour éviter de rester connecté après avoir lancé un processus long, vous utiliserez la commande nohup :
# nohup sort ventes & [Entrée]
La commande kill
Cette commande est utilisée pour arrêter un processus. Elle est à utiliser avec le PID.
# kill PID1 PID2 [Entrée]
La commande kill envoie des signaux aux processus. La liste des signaux possibles peut être afficher avec la commande :
# kill -l [Entrée]
Vous constaterez une liste des signaux possibles :
Sous ksh :
# kill -l EXIT HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM USR1 USR2 CLD PWR WINCH URG POLL STOP TSTP CONT TTIN TTOU VTALRM PROF XCPU XFSZ WAITING LWP FREEZE THAW CANCEL LOST XRES JVM1 JVM2 RTMIN RTMIN+1 RTMIN+2 RTMIN+3 RTMAX-3 RTMAX-2 RTMAX-1 RTMAX
Sous bash :
# /usr/bin/bash bash-3.00# kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGEMT 8) SIGFPE 9) SIGKILL 10) SIGBUS 11) SIGSEGV 12) SIGSYS 13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGUSR1 17) SIGUSR2 18) SIGCHLD 19) SIGPWR 20) SIGWINCH 21) SIGURG 22) SIGIO 23) SIGSTOP 24) SIGTSTP 25) SIGCONT 26) SIGTTIN 27) SIGTTOU 28) SIGVTALRM 29) SIGPROF 30) SIGXCPU 31) SIGXFSZ 32) SIGWAITING 33) SIGLWP 34) SIGFREEZE 35) SIGTHAW 36) SIGCANCEL 37) SIGLOST 41) SIGRTMIN 42) SIGRTMIN+1 43) SIGRTMIN+2 44) SIGRTMIN+3 45) SIGRTMAX-3 46) SIGRTMAX-2 47) SIGRTMAX-1 48) SIGRTMAX
Les commandes procTools
pcred
Cette commande affiche le propriétaire d'un processus :
# pcred 1 1: e/r/suid=0 e/r/sgid=0
pfiles
Cette commande indique les fichiers ouverts :
# pfiles 1
1: /sbin/init
Current rlimit: 256 file descriptors
0: S_IFIFO mode:0600 dev:102,0 ino:44720 uid:0 gid:0 size:0
O_RDWR|O_NDELAY
/etc/initpipe
253: S_IFREG mode:0444 dev:275,1 ino:65538 uid:0 gid:0 size:0
O_RDONLY|O_LARGEFILE FD_CLOEXEC
/system/contract/process/pbundle
254: S_IFREG mode:0666 dev:275,1 ino:65539 uid:0 gid:0 size:0
O_RDWR|O_LARGEFILE FD_CLOEXEC
/system/contract/process/template
255: S_IFREG mode:0666 dev:275,1 ino:65539 uid:0 gid:0 size:0
O_RDWR|O_LARGEFILE FD_CLOEXEC
/system/contract/process/template
pflags
Cette commande donne des informations d'état :
# pflags 1
1: /sbin/init
data model = _ILP32 flags = ORPHAN|MSACCT|MSFORK
/1: flags = ASLEEP pollsys(0x806a458,0x1,0x8047610,0x0)
pldd
Cette commande liste les libraires dynamiques utilisées :
# pldd 1 1: /sbin/init /lib/libpam.so.1 /lib/libbsm.so.1 /lib/libcontract.so.1 /lib/libc.so.1 /lib/libcmd.so.1 /lib/libsocket.so.1 /lib/libnsl.so.1 /lib/libmd.so.1 /lib/libsecdb.so.1 /lib/libnvpair.so.1 /lib/libscf.so.1 /lib/libdoor.so.1 /lib/libuutil.so.1 /lib/libgen.so.1
pmap
Cette commande indique l'espace d'adressage :
# pmap 1 1: /sbin/init 08046000 8K rw--- [ stack ] 08050000 36K r-x-- /sbin/init 08069000 8K rw--- /sbin/init 0806B000 24K rw--- [ heap ] D0470000 24K r-x-- /lib/libgen.so.1 D0486000 4K rw--- /lib/libgen.so.1 D0490000 24K r-x-- /lib/libuutil.so.1 D04A6000 4K rw--- /lib/libuutil.so.1 D04B0000 4K r-x-- /lib/libdoor.so.1 D04C1000 4K rw--- /lib/libdoor.so.1 D04D0000 88K r-x-- /lib/libscf.so.1 D04F6000 4K rw--- /lib/libscf.so.1 D0500000 24K rwx-- [ anon ] D0510000 24K r-x-- /lib/libnvpair.so.1 D0526000 4K rw--- /lib/libnvpair.so.1 D0530000 12K r-x-- /lib/libsecdb.so.1 D0543000 4K rw--- /lib/libsecdb.so.1 D0550000 56K r-x-- /lib/libmd.so.1 D056E000 4K rw--- /lib/libmd.so.1 D0570000 516K r-x-- /lib/libnsl.so.1 D0601000 20K rw--- /lib/libnsl.so.1 D0606000 32K rw--- /lib/libnsl.so.1 D0610000 44K r-x-- /lib/libsocket.so.1 D062B000 4K rw--- /lib/libsocket.so.1 D0630000 12K r-x-- /lib/libcmd.so.1 D0643000 4K rw--- /lib/libcmd.so.1 D0650000 756K r-x-- /lib/libc.so.1 D071D000 28K rw--- /lib/libc.so.1 D0724000 8K rw--- /lib/libc.so.1 D0730000 16K r-x-- /lib/libcontract.so.1 D0740000 4K rwx-- [ anon ] D0744000 4K rw--- /lib/libcontract.so.1 D0750000 116K r-x-- /lib/libbsm.so.1 D077D000 16K rw--- /lib/libbsm.so.1 D0781000 4K rw--- /lib/libbsm.so.1 D0790000 24K r-x-- /lib/libpam.so.1 D07A0000 4K rwx-- [ anon ] D07A6000 4K rw--- /lib/libpam.so.1 D07B0000 4K rwx-- [ anon ] D07B2000 4K rwxs- [ anon ] D07C0000 4K rwx-- [ anon ] D07C5000 156K r-x-- /lib/ld.so.1 D07F0000 4K rwx-- [ anon ] D07FC000 8K rwx-- /lib/ld.so.1 D07FE000 4K rwx-- /lib/ld.so.1 total 2160K
pstack
Cette commande indique la pile d'exécution :
# pstack 1 1: /sbin/init d06f45a7 pollsys (806a458, 1, 8047610, 0) d069e79e poll (806a458, 1, 493e0) + 52 08053815 main (1, 8047f6c, 8047f74) + 3eb 08053346 ???????? (1, 8047fe0, 0, 0, 7d8, 8047feb)
ptree
Cette commande démontre un arbre de parents et de fils du processus :
# ptree
7 /lib/svc/bin/svc.startd
392 /usr/lib/saf/sac -t 300
397 /usr/lib/saf/ttymon
421 /usr/lib/saf/ttymon -g -d /dev/console -l console -m ldterm,ttcompat -h -p unkn
9 /lib/svc/bin/svc.configd
52 /sbin/dhcpagent
121 /usr/lib/crypto/kcfd
124 /usr/lib/sysevent/syseventd
126 /usr/sbin/nscd
140 /usr/lib/power/powerd
183 /usr/lib/picl/picld
367 /usr/sbin/rpcbind
370 /usr/lib/nfs/nfsmapid
373 /usr/lib/nfs/statd
374 /usr/lib/nfs/nfs4cbd
391 /usr/lib/nfs/lockd
398 /usr/lib/inet/inetd start
419 /usr/lib/utmpd
431 /usr/sadm/lib/smc/bin/smcboot
432 /usr/sadm/lib/smc/bin/smcboot
435 /usr/sadm/lib/smc/bin/smcboot
519 /usr/lib/autofs/automountd
520 /usr/lib/autofs/automountd
543 /usr/sbin/vold -f /etc/vold.conf
544 /usr/sbin/syslogd
551 /usr/lib/ssh/sshd
562 devfsadmd
568 /usr/sfw/sbin/snmpd
570 /usr/lib/fm/fmd/fmd
583 /usr/lib/snmp/snmpdx -y -c /etc/snmp/conf
584 /usr/apache2/bin/httpd -k start
594 /usr/apache2/bin/httpd -k start
595 /usr/apache2/bin/httpd -k start
596 /usr/apache2/bin/httpd -k start
599 /usr/apache2/bin/httpd -k start
608 /usr/apache2/bin/httpd -k start
603 /usr/lib/dmi/dmispd
607 /usr/lib/dmi/snmpXdmid -s unknown
659 /usr/dt/bin/dtlogin -daemon
670 /usr/openwin/bin/fbconsole -n -d :0
671 /usr/X11/bin/Xorg :0 -depth 24 -nobanner -auth /var/dt/A:0-nGaysb
724 /usr/dt/bin/dtlogin -daemon
800 /bin/ksh /usr/dt/bin/Xsession
890 /usr/dt/bin/sdt_shell -c unset DT; DISPLAY=:0; /usr/dt/bin/dt
893 -sh -c unset DT; DISPLAY=:0; /usr/dt/bin/dtsession_res -merge
905 /bin/ksh /usr/dt/config/Xsession2.jds
913 /usr/bin/gnome-session
709 /usr/apache/bin/httpd
718 /usr/apache/bin/httpd
719 /usr/apache/bin/httpd
720 /usr/apache/bin/httpd
721 /usr/apache/bin/httpd
723 /usr/apache/bin/httpd
795 /usr/java/bin/java -server -Xmx128m -XX:+BackgroundCompilation -XX:PermSize=32m
875 /usr/dt/bin/dsdm
925 /usr/lib/gconfd-2 15
928 /usr/bin/gnome-keyring-daemon
930 xscreensaver -nosplash
933 /usr/lib/bonobo-activation-server --ac-activate --ior-output-fd=23
935 gnome-smproxy --sm-client-id default0
937 /usr/lib/gnome-settings-daemon --oaf-activate-iid=OAFIID:GNOME_SettingsDaemon -
949 /usr/bin/metacity --sm-client-id=default1
956 gnome-panel --sm-client-id default2
958 nautilus --no-default-window --sm-client-id default3
960 gnome-volcheck -i 30 -z 3 -m cdrom,floppy,zip,jaz,dvdrom --sm-client-id default
961 gnome-volcheck -i 30 -z 3 -m cdrom,floppy,zip,jaz,dvdrom --sm-client-id default
984 /usr/lib/gnome-vfs-daemon --oaf-activate-iid=OAFIID:GNOME_VFS_Daemon_Factory --
996 /usr/lib/mapping-daemon
1006 /usr/lib/clock-applet --oaf-activate-iid=OAFIID:GNOME_ClockApplet_Factory --oaf
1016 /usr/lib/wnck-applet --oaf-activate-iid=OAFIID:GNOME_Wncklet_Factory --oaf-ior-
1026 /usr/lib/gnome-netstatus-applet --oaf-activate-iid=OAFIID:GNOME_NetstatusApplet
1028 /usr/lib/mixer_applet2 --oaf-activate-iid=OAFIID:GNOME_MixerApplet_Factory --oa
1038 /usr/lib/notification-area-applet --oaf-activate-iid=OAFIID:GNOME_NotificationA
1046 /usr/jdk/latest/bin/java -version:1.5+ -jar /usr/lib/patch/swupna.jar -wait
1079 /usr/lib/sendmail -bd -q15m
1080 /usr/lib/sendmail -Ac -q15m
1275 /bin/sh /usr/bin/firefox
1290 /bin/sh /usr/lib/firefox/run-mozilla.sh /usr/lib/firefox/firefox-bin -UILocale
1296 /usr/lib/firefox/firefox-bin -UILocale fr-FR -contentLocale FR
1321 gnome-terminal
1322 gnome-pty-helper
1577 sh
1578 -sh
1792 ptree
1650 sh
1651 /usr/bin/ksh
1550 /usr/sbin/cron
1646 sleep 9999
pwdx
Cette commande indique le répertoire courant du processus :
# pwdx 1 1: /
Gestion des crash dump
Le termination anormale d'un processus génére un crash dump avec la création de fichiers process core dump.
Lors d'une anomolie critique, Solaris appelle la routine panic(). Cette routine interompe tous les processus et crée les fichiers system core dump unix.<X> et vmcore.<X> dans le périphérique de vidage. Ensuite Solaris utilise la commande savecore pour déplacer les fichiers core dump vers le répertoire Savecore lors du démarrage suivant.
Pour administrer les crash dumps, il convient d'utiliser la commande dumpadm :
# dumpadm
Contenu de vidage : noyau pages
Périphérique de vidage : /dev/dsk/c0d0s1 (échange)
Répertoire Savecore : /var/crash/unknown
Savecore activé : oui
Dans la sortie de la commande, on peut noter :
- le contenu de vidage est les pages mémoire du noyau,
- le périphérique de vidage est la tranche swap,
- les fichiers core dump seront écrits dans /var/crash/unknown,
- crash dump est activée.
Pour désactiver les crash dump il convient d'utiliser la commande dumpadm avec l'option -n :
# dumpadm -n
Contenu de vidage : noyau pages
Périphérique de vidage : /dev/dsk/c0d0s1 (échange)
Répertoire Savecore : /var/crash/unknown
Savecore activé : non
Pour activer les crash dump il convient d'utiliser la commande dumpadm avec l'option -y :
# dumpadm -y
Contenu de vidage : noyau pages
Périphérique de vidage : /dev/dsk/c0d0s1 (échange)
Répertoire Savecore : /var/crash/unknown
Savecore activé : oui
Pour modifier la configuration des crash dump, il convient de stipuler les options adéquates :
dumpadm -c contenu -d dump-device -m nnnk | nnnm | nnn% -n -s rép-savecore
Dans cette ligne de commande on peut noter les options suivantes :
- contenu,
- kernel - la mémoire du noyau,
- all - toute la mémoire,
- curproc - la mémoire du noyau plus celle du processus en exécution au moment du crash,
- dump-device,
- le device qui stocke les données du dump,
- la valeur par défaut est la partition swap primaire,
- -m
- nnnk - indique le nombre de Ko qui ne peuvent pas être utilisés par les fichiers core dump,
- nnnm - indique le nombre de Mo qui ne peuvent pas être utilisés par les fichiers core dump,
- nnn% - indique le pourcentage du filesystem qui ne peuvent pas être utilisés par les fichiers core dump,
- -n
- spécifie que la commande savecore ne doit pas s'exécuter lors du re-démarrage du système,
- cette option est fortement déconseillée car l'information du crash dump sera écrasée quand le système commence à utiliser le swap,
- -s
- indique un répertoire alternatif pour le stockage des fichiers core dump,
- par défaut la valeur de rép-savecore est /var/crash/hostname.
Exécutez donc la commande suivante pour modifier la configuration des crash dump :
# dumpadm -c kernel -d /dev/dsk/c0d0s1 -m 10%
Contenu de vidage : noyau pages
Périphérique de vidage : /dev/dsk/c0d0s1 (échange)
Répertoire Savecore : /var/crash/unknown (minfree = 561531Ko)
Savecore activé : oui
<note> Expliquez la signification des options. </note>
Utilisez maintenant la commande gcore pour forcer un core dump du processus de votre terminal :
# gcore $$ gcore: core.1118 dumped
Le fichier core.PID est sauvegardé dans le répertoire courant.
Utilisez maintenant la commande pstack pour visualiser le stack du processus :
# pstack core.1118 core 'core.1118' of 1118: sh d0774b57 waitid (0, 49f, 8047340, 83) d0769688 waitpid (49f, 8047400, 80) + 75 0805e85d ???????? (80774e0) 0805f140 postjob (49f, 1) + ce 08059ba2 execute (807798c, 0, 0) + 70a 080605eb ???????? (0) 08060467 main (1, 80474c8, 80474d0) + 4af 080551c6 ???????? (1, 8047604, 0, 8047607, 8047619, 8047632)
La commande mdb indique le processus générateur du fichier crash dump ainsi que la commande utilisée pour le générer :
# mdb core.1118 Loading modules: [ libc.so.1 ld.so.1 ] > ::status debugging core file of sh (32-bit) from unknown file: /sbin/sh initial argv: sh threading model: multi-threaded status: process core file generated with gcore(1)
Durée approximative : 1 heure
Gestion des Tâches sous Solaris
cron
Le démon cron est normalement lancé au démarrage de la machine. Ce service est chargé de faire exécuter des tâches ( commandes et scripts ) à des moments précis.
Le service cron lit toutes les minutes les fichiers propres à chaque utilisateur qui se trouvent dans /var/spool/cron/crontabs/ et qui sont au nom de chaque utilisateur.
Par exemple, le fichier propre à l'utilisateur fenestros est le fichier /var/spool/cron/crontabs/fenestros.
Le service cron exécute des tâches en rajoutant une ligne dans le fichier /var/cron/log. Si une commande produit une sortie, celle-ci est dirigée vers la messagerie.
L'utilisation de cron est réservé à root. Cependant, vous pouvez établir une liste d'utilisateurs qui ont la permission d'utiliser cron en créant un fichier nommé cron.allow dans /etc/cron.d/. A l'inverse, un fichier cron.deny peut contenir une liste d'utilisateurs qui n'ont pas la permission d'utiliser cron. Par défaut, Solaris a un fichier cron.deny :
# cat /etc/cron.d/cron.deny daemon bin nuucp listen nobody noaccess
<note important> Il est à noter ici que le service cron présume que la machine est allumée en permanence. </note>
Quand le démon cron exécute la commande dans un fichier crontab, il définit un environnement réduit comprenant les variables HOME, LOGNAME, SHELL , qui est définit par défaut en /bin/sh et PATH. Le variable PATH est définit en tant que /bin:/usr/bin mais peut être modifiée par l'édition du fichier /etc/default/cron :
# cat /etc/default/cron CRONLOG=YES
Ce fichier peut contenir donc les définitions du PATH pour les utilisateurs et de SUPATH pour root.
Chaque ligne dans un fichier crontab contient 5 champs temporels qui décrivent le périodicité de l'exécution de la tâche concernée.
Les 5 champs sont :
| Minutes | Heures | Jour du mois | Mois de l'année | Jour de la sem. |
|---|---|---|---|---|
| (0-59) | (0-23) | (1-31) | (1-12) | (0-6)* |
* le 0 correspond à dimanche.
Les champs temporels peuvent contenir des valeurs différentes :
| Exemple | Description |
|---|---|
| Une valeur absolue telle 10 | Dans le champs minutes = 10 minutes après l'heure |
| Une série de valeurs telle 2,6,8 | Dans le champs mois = février, juin et août |
| Une intervalle telle 1-5 | Dans le champs Jour de la Semaine = du lundi au vendredi |
| Le joker * | Dans le champs minutes = toutes les minutes |
| Une périodicité telle 0-23/2 | Dans le champs heures = toutes les deux heures |
Dans notre cas nous souhaitons confier à cron la gestion des mises à jour des définitions de virus ainsi que la vérification du répertoire /export/home au quotidien.
Afin de faire ceci, nous allons éditer le fichier crontab de root. Pour vérifier s'il existe une version de crontab existante pour root, il convient de lancer la commande suivante :
# crontab -l #ident "@(#)root 1.21 04/03/23 SMI" # # The root crontab should be used to perform accounting data collection. # # 10 3 * * * /usr/sbin/logadm 15 3 * * 0 /usr/lib/fs/nfs/nfsfind 30 3 * * * [ -x /usr/lib/gss/gsscred_clean ] && /usr/lib/gss/gsscred_clean # # The rtc command is run to adjust the real time clock if and when # daylight savings time changes. # 1 2 * * * [ -x /usr/sbin/rtc ] && /usr/sbin/rtc -c > /dev/null 2>&1 #10 3 * * * /usr/lib/krb5/kprop_script ___slave_kdcs___
Afin de créer ou éditer un fichier crontab, il convient d'utiliser la commande crontab avec l'option -e. Cette commande lance l'interface de l'éditeur définit par la variable $EDITOR. Actuellement, root ne dispose pas de fichier .profile. Commençons donc par créer ce fichier à la racine du système de fichiers :
# vi .profile [Entrée]
Editez le fichier ainsi :
EDITOR=/usr/bin/vi export EDITOR
Sauvegardez votre fichier puis ré-amorcez votre Solaris. Ouvrez de nouveau une session root et vérifiez que votre éditeur est bien VI :
# echo $EDITOR /usr/bin/vi
Nous pouvons maintenant éditer le crontab de root :
# crontab -e [Entrée]
Vous obtiendrez un résultat similaire à celui-ci :
#ident "@(#)root 1.21 04/03/23 SMI" # # The root crontab should be used to perform accounting data collection. # # 10 3 * * * /usr/sbin/logadm 15 3 * * 0 /usr/lib/fs/nfs/nfsfind 30 3 * * * [ -x /usr/lib/gss/gsscred_clean ] && /usr/lib/gss/gsscred_clean # # The rtc command is run to adjust the real time clock if and when # daylight savings time changes. # 1 2 * * * [ -x /usr/sbin/rtc ] && /usr/sbin/rtc -c > /dev/null 2>&1 #10 3 * * * /usr/lib/krb5/kprop_script ___slave_kdcs___ # ~ ~ ~ ~ ~ ~ ~ ~ "/tmp/crontab.raOOv" 15 lignes, 484 caractères
Passez en mode EDITION. Tapez ensuite le texte suivant à la fin de votre fichier :
10 23 * * * /opt/csw/bin/freshclam 20 23 * * * /opt/csw/bin/clamscan -r /export/home
Sauvegardez et quittez vi.
A l'examen du fichier /var/spool/cron/crontabs/root, vous verrez que votre modification a bien été prise en compte :
# cd /var/spool/cron/crontabs # ls adm lp root sys uucp # cat root #ident "@(#)root 1.21 04/03/23 SMI" # # The root crontab should be used to perform accounting data collection. # # 10 3 * * * /usr/sbin/logadm 15 3 * * 0 /usr/lib/fs/nfs/nfsfind 30 3 * * * [ -x /usr/lib/gss/gsscred_clean ] && /usr/lib/gss/gsscred_clean # # The rtc command is run to adjust the real time clock if and when # daylight savings time changes. # 1 2 * * * [ -x /usr/sbin/rtc ] && /usr/sbin/rtc -c > /dev/null 2>&1 #10 3 * * * /usr/lib/krb5/kprop_script ___slave_kdcs___ 10 23 * * * /opt/csw/bin/freshclam 20 23 * * * /opt/csw/bin/clamscan -r /export/home #
<note> Créez un crontab pour l'utilisateur test. Le crontab doit contenir la ligne * * * * * /bin/pwd > pwd.txt. Constatez la création du fichier pwd.txt. Ensuite inscrivez le nom de l'utilisateur test dans le fichier /etc/cron.d/cron.deny. Essayez d'éditer le crontab en tant que l'utilisateur test et en utilisant la commande crontab -e. Que constatez-vous ? Supprimez le fichier pwd.txt créé par ce crontab. Est'ce que le job du crontab de test continue de fonctionner ? </note>
at
Tout comme avec la commande cron, root a la possibilité d'accorder ou d'interdire aux utilisateurs le droit d'exécuter des tâches avec at en utilisant les deux fichiers suivants :
- /etc/cron.d/at.allow
- /etc/cron.d/at.deny
<note important> Si le fichier at.allow existe, seuls les utilisateurs dans ce fichier pourront exécuter at. </note>
Pour mettre en place une tâche at, vous devez indiquer au système à quel moment cette tâche doit avoir lieu. Dans l'exemple qui suit, vous mettrez en place une tâche qui s'exécutera 3 minutes après la saisie :
# at now +3 minutes [Entrée] at> pwd > /tmp/test.atd [Entrée] at> [^D] [Entrée] at> <EOT> les commandes seront exécutées avec /sbin/sh tâche 1212489663.a à mar. juin 3 12:41:03 2008
Vérifiez ensuite la présence de la tâche :
# at -l user = root 1212489663.a mar. juin 3 12:41:03 2008
A l'issu des trois minutes, vérifiez le contenu du fichier /tmp/test.atd :
# cat /tmp/test.atd /var/spool/cron/crontabs
Mettez en place maintenant deux tâches pour le 31/12/2012 à 13h00 et 14h00 respectivement :
# at 13:00 Dec 31 [Entrée] at> pwd > /tmp/test13.atd [Entrée] at> [^D] [Entrée] at> <EOT> les commandes seront exécutées avec /sbin/sh tâche 1230724800.a à lun. déc. 31 13:00:00 2012
# at 14:00 Dec 31 [Entrée] at> vmstat > /tmp/test14.atd [Entrée] at> [^D] [Entrée] at> <EOT> les commandes seront exécutées avec /sbin/sh tâche 1230728400.a à lun. déc. 31 14:00:00 2012
Il existent maintenant deux tâches :
# at -l user = root 1230724800.a lun. déc. 31 13:00:00 2012 user = root 1230728400.a lun. déc. 31 14:00:00 2012
Les fichiers concernant ces deux tâches sont stockés dans le répertoire /var/spool/cron/atjobs :
# cd /var/spool/cron/atjobs # ls 1230724800.a 1230728400.a
A l'examen du deuxième fichier, vous constaterez un résultat similaire à celui-ci :
# cat 1230724800.a : at job : jobname: stdin : notify by mail: no : project: 1 export AB_CARDCATALOG; AB_CARDCATALOG='/usr/dt/share/answerbooks/fr_FR.ISO8859-15/ab_cardcatalog' export COLORTERM; COLORTERM='gnome-terminal' export DISPLAY; DISPLAY=':0.0' export DTAPPSEARCHPATH; DTAPPSEARCHPATH='//.dt/appmanager:/usr/dt/appconfig/appmanager/%L:/usr/dt/appconfig/appmanager/C' export DTDATABASESEARCHPATH; DTDATABASESEARCHPATH='//.dt/types,/usr/dt/appconfig/types/%L,/usr/dt/appconfig/types/C' export DTDEVROOT; DTDEVROOT='' export DTHELPSEARCHPATH; DTHELPSEARCHPATH='//.dt/help/root-poste-0/%H://.dt/help/root-poste-0/%H.sdl://.dt/help/root-poste-0/%H.hv://.dt/help/%H://.dt/help/%H.sdl://.dt/help/%H.hv:/usr/dt/appconfig/help/%L/%H:/usr/dt/appconfig/help/%L/%H.sdl:/usr/dt/appconfig/help/%L/%H.hv:/usr/dt/appconfig/help/C/%H:/usr/dt/appconfig/help/C/%H.sdl:/usr/dt/appconfig/help/C/%H.hv' export DTSCREENSAVERLIST; DTSCREENSAVERLIST='StartDtscreenSwarm StartDtscreenQix StartDtscreenFlame StartDtscreenHop StartDtscreenImage StartDtscreenLife StartDtscreenRotor StartDtscreenPyro StartDtscreenWorm StartDtscreenBlank' export DTSOURCEPROFILE; DTSOURCEPROFILE='true' export DTUSERSESSION; DTUSERSESSION='root-poste-0' export DTXSERVERLOCATION; DTXSERVERLOCATION='local' export EDITOR; EDITOR='/usr/bin/vi' export ENV; ENV='/etc/kshrc' export GNOME_DESKTOP_SESSION_ID; GNOME_DESKTOP_SESSION_ID='Default' export GNOME_KEYRING_SOCKET; GNOME_KEYRING_SOCKET='/var/tmp/keyring-7QKZ1k/socket' export GTK_RC_FILES; GTK_RC_FILES='/etc/gtk/gtkrc://.gtkrc-1.2-gnome2' export G_BROKEN_FILENAMES; G_BROKEN_FILENAMES='yes' export G_FILENAME_ENCODING; G_FILENAME_ENCODING='@locale,UTF-8' export HELPPATH; HELPPATH='/usr/openwin/lib/locale:/usr/openwin/lib/help' export HOME; HOME='/' export LANG; LANG='fr_FR.ISO8859-15' export LC_COLLATE; LC_COLLATE='fr_FR.ISO8859-15' export LC_CTYPE; LC_CTYPE='fr_FR.ISO8859-15' export LC_MESSAGES; LC_MESSAGES='fr_FR.ISO8859-15' export LC_MONETARY; LC_MONETARY='fr_FR.ISO8859-15' export LC_NUMERIC; LC_NUMERIC='fr_FR.ISO8859-15' export LC_TIME; LC_TIME='fr_FR.ISO8859-15' export LOGNAME; LOGNAME='root' export MAIL; MAIL='/var/mail/root' export MANPATH; MANPATH='/usr/dt/man:/usr/man:/usr/openwin/share/man' export OPENWINHOME; OPENWINHOME='/usr/openwin' export PATH; PATH='/usr/sbin:/usr/bin:/usr/openwin/bin:/usr/ucb' export PWD; PWD='/' export SDT_NO_DTDBCACHE; SDT_NO_DTDBCACHE='1' export SDT_NO_TOOLTALK; SDT_NO_TOOLTALK='1' export SESSIONTYPE; SESSIONTYPE='altDt' export SESSION_MANAGER; SESSION_MANAGER='local/poste:/tmp/.ICE-unix/18296,inet6/poste:33063,inet/poste:33064' export SESSION_SVR; SESSION_SVR='poste' export SHELL; SHELL='/sbin/sh' export START_SPECKEYSD; START_SPECKEYSD='no' export TERM; TERM='xterm' export TZ; TZ='Europe/Paris' export USER; USER='root' export WINDOWID; WINDOWID='46137391' export XFILESEARCHPATH; XFILESEARCHPATH='/usr/openwin/lib/locale/%L/%T/%N%S:/usr/openwin/lib/%T/%N%S' export XMBINDDIR; XMBINDDIR='/usr/dt/lib/bindings' export XMICONBMSEARCHPATH; XMICONBMSEARCHPATH='//.dt/icons/%B%M.bm://.dt/icons/%B%M.pm://.dt/icons/%B:/usr/dt/appconfig/icons/%L/%B%M.bm:/usr/dt/appconfig/icons/%L/%B%M.pm:/usr/dt/appconfig/icons/%L/%B:/usr/dt/appconfig/icons/C/%B%M.bm:/usr/dt/appconfig/icons/C/%B%M.pm:/usr/dt/appconfig/icons/C/%B' export XMICONSEARCHPATH; XMICONSEARCHPATH='//.dt/icons/%B%M.pm://.dt/icons/%B%M.bm://.dt/icons/%B:/usr/dt/appconfig/icons/%L/%B%M.pm:/usr/dt/appconfig/icons/%L/%B%M.bm:/usr/dt/appconfig/icons/%L/%B:/usr/dt/appconfig/icons/C/%B%M.pm:/usr/dt/appconfig/icons/C/%B%M.bm:/usr/dt/appconfig/icons/C/%B' export _; _='/usr/bin/gnome-session' export dtstart_sessionlogfile; dtstart_sessionlogfile='/dev/null' $SHELL << '...the rest of this file is shell input' #ident "@(#).proto 1.6 00/05/01 SMI" /* SVr4.0 1.2 */ cd /var/spool/cron/crontabs umask 22 ulimit unlimited pwd > /tmp/test13.atd
Pour supprimer cette tâche il convient d'utiliser la commande suivante :
# at -r N° de tâche [Entrée]
Par exemple :
# at -l user = root 1230724800.a mer. déc. 31 13:00:00 2009 user = root 1230728400.a mer. déc. 31 14:00:00 2009 # at -r 1230724800.a # at -l user = root 1230728400.a mer. déc. 31 14:00:00 2009
Finalement, pour exécuter plusieurs commandes à la même heure d'une manière séquentielle, vous pouvez les insérer dans un fichier :
# at 10:00 < todo.txt [Entrée]
Par exemple :
# touch todo.list # echo pwd > todo.list # echo free >> todo.list # echo who >> todo.list # at 14:30 Dec 31 < todo.list les commandes seront exécutées avec /sbin/sh tâche 1356960600.a à lun. déc 31 14:30:00 2012
<html> <center> Copyright © 2011-2018 I2TCH LIMITED.<br><br> </center> </html>