14.5 Programm- und Prozessverwaltung
at – Kommando zu einem bestimmten Zeitpunkt ausführen lassen
Mit dem Kommando at können Sie ein Kommando zum angegebenen Zeitpunkt ausführen lassen, auch wenn der Benutzer zu diesem Zeitpunkt nicht angemeldet ist. Beispielsweise können Sie mit
at 2130 -f myscript
das Script »myscript« um 21:30 Uhr ausführen lassen. Natürlich lassen sich mehrere solcher zeitgesteuerten Kommandos einrichten. Jeder dieser at-Aufrufe wird an die at-Queue (atq) angehängt. Natürlich funktioniert dies auch mit Datum:
at 2200 apr 21 -f myscript
So würde das Script »myscript« am 2. April um 22 Uhr ausgeführt. Wollen Sie sich alle Aufträge der atq auflisten lassen, müssen Sie die Option –l verwenden:
at -l
Wollen Sie den Status des Auftrags mit der Nummer 33 anzeigen lassen, geben Sie Folgendes ein:
at -l 33
Soll dieser Auftrag gelöscht werden, so kann die Option –d verwendet werden:
at -d 33
batch – Kommando irgendwann später ausführen lassen
Mit batch lesen Sie Kommandos von der Kommandozeile, welche zu einem späteren Zeitpunkt ausgeführt werden, sobald das System Zeit hat. Dies wird bei extrem belasteten Rechnern gern verwendet, wenn man das Kommando bzw. Script zu einer Zeit ausführen lassen will, in der die Systemlast definitiv niedrig ist, und dies nicht nur zu vermuten ist. Die angegebenen Kommandos werden auch dann ausgeführt, wenn der Benutzer nicht angemeldet ist. Um batch auszuführen, muss auch hier der at-Daemon, der auch für das Kommando at verantwortlich ist, laufen.
you@host > batch
warning: commands will be executed using /bin/sh
at> ls -l
at> ./myscript
at> sleep 1
at> (Strg)+(D)
job 1 at 2005–04–21 23:30
Das Ende der Kommandozeileneingabe von batch müssen Sie mit (Strg)+(D) angeben.
bg – einen angehaltenen Prozess im Hintergrund fortsetzen
Mit dem Kommando bg können Sie einen (z. B. mit (Strg)+(Z)) angehaltenen Prozess im Hintergrund fortsetzen. bg wurde bereits in Abschnitt 8.7 behandelt.
cron/crontab – Programme in bestimmten Zeitintervallen ausführen lassen
Mit cron können Sie beliebig viele Kommandos automatisch in bestimmten Zeitintervallen ausführen lassen. Einmal pro Minute sieht dieser Dämon in einen Terminkalender (crontab) nach und führt gegebenenfalls darin enthaltene Kommandos aus. cron wurde bereits ausführlich in Abschnitt 8.8 behandelt.
fg – einen angehaltenen Prozess im Vordergrund fortsetzen
Mit dem Kommando fg können Sie einen (z. B. mit (Strg)+(Z)) angehaltenen Prozess im Vordergrund fortsetzen. fg wurde bereits in Abschnitt 8.7 behandelt.
jobs – Anzeigen angehaltener bzw. im Hintergrund laufender Prozesse
Mit jobs bekommen Sie eine Liste mit den aktuellen Jobs zurückgegeben. Neben der Jobnummer steht bei jedem Job der Kommandoname, der Status und eine Markierung. Die Markierung »+« steht für den aktuellen Job, »-« für den vorhergehenden Job. Das Kommando job wurde bereits in Abschnitt 8.7 behandelt.
kill – Signale an Prozesse mit einer Prozessnummer senden
Mit kill senden Sie den Prozessen durch Angabe der Prozessnummer ein Signal. Standardmäßig wird das Signal SIGTERM zum Beenden des Prozesses gesendet. Es lassen sich aber auch beliebige andere Signale senden. Das Signal wird dabei als Nummer oder als Name übermittelt. Einen Überblick zu den möglichen Signalnamen finden Sie mit der Option –l. Das Kommando kill wurde bereits ausführlicher in Abschnitt 7.2 beschrieben.
killall – Signale an Prozesse mit einem Prozessnamen senden
Der Name killall führt schnell in die Irre. Damit lassen sich nicht etwa alle Prozesse »killen«, sondern killall stellt eher eine Erleichterung für kill dar. Anstatt wie mit kill einen Prozess mit der Prozessnummer zu beenden bzw. ein Signal zu senden, kann mit killall der Prozessname verwendet werden. Was gerade bei unzählig vielen gleichzeitig laufenden Prozessen eine erhebliche Erleichterung darstellt, weil man hier nicht mühsam erst nach der Prozessnummer (z. B. mit dem Kommando ps) suchen muss. Ansonsten lässt sich killall ähnlich wie kill verwenden, nur dass der Signalname ohne das vorangestellte SIG angegeben wird. Eine Liste aller Signale erhalten Sie auch hier mit der Option –l.
you@host > sleep 60 &
[1] 5286
you@host > killall sleep
[1]+ Beendet sleep 60
nice – Prozesse mit anderer Priorität ausführen lassen
Mit nice können Sie veranlassen, dass ein Kommando mit einer niedrigeren Priorität ausgeführt wird.
nice [-n] kommando [argumente]
Für n können Sie dabei eine Ziffer angeben, um wie viel die Priorität verändert werden soll. Der Standardwert, falls keine Angabe erfolgt, lautet 10 (-20 ist die höchste und 19 die niedrigste Priorität). Prioritäten höher als 0 darf ohnehin nur root starten. Häufig wird man das Kommando mit nice im Hintergrund starten wollen.
nice find / -name document -print > /home/tmp/find.txt &
Hier wird mit find nach einer Datei »document« gesucht und die Ausgabe in die Datei find.txt geschrieben. Der Hintergrundprozess find wird dabei von nice mit einer niedrigen (10) Priorität gestartet. Dies stellt eine gängige Verwendung von nice dar.
nohup – Prozesse beim Beenden einer Sitzung weiterlaufen lassenHH
Mit nohup schützen Sie Prozesse vor dem HANGUP-Signal. Dadurch ist es möglich, dass ein Prozess im Hintergrund weiterlaufen kann, auch wenn sich ein Benutzer abmeldet. Ohne nohup würden sonst alle Prozesse einer Login-Shell des Anwenders durch das Signal SIGHUP beendet. Allerdings tritt dieses Verhalten nicht auf allen Systemen auf. Mehr zu nohup finden Sie in Abschnitt 8.4, wo dieses Kommando ausführlicher behandelt wurde.
ps – Prozessinformationen anzeigen
Hinweis ps ist eines dieser Kommandos, welches vollkommen unterschiedliche Optionen auf den unterschiedlichen Betriebssystemen bietet. Die folgenden Beschreibung bezieht sich daher auf Linux.
|
ps ist wohl das wichtigste Kommando für Systemadministratoren, um an Informationen zu aktiven Prozessen zu gelangen (neben top). Rufen Sie ps ohne irgendwelche Argumente auf, werden Ihnen die zum jeweiligen Terminal gestarteten Prozesse aufgelistet. Zu jedem Prozess erhalten Sie die Prozessnummer (PID), den Terminal-Namen (TTY), die verbrauchte Rechenzeit (TIME) und den Kommandonamen (COMMAND). Aber neben diesen Informationen lassen sich über Optionen noch viele weitere Informationen entlocken. Häufig verwendet wird dabei der Schalter –e, womit Informationen zu allen Prozessen zu gewinnen sind (also nicht nur zum jeweiligen Terminal), und ebenso der Schalter –f, womit Sie noch vollständigere Informationen bekommen:
you@host > ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 Apr21 ? 00:00:04 init [5]
root 2 1 0 Apr21 ? 00:00:00 [ksoftirqd/0]
root 3 1 0 Apr21 ? 00:00:00 [events/0]
root 23 3 0 Apr21 ? 00:00:00 [kblockd/0]
...
postfix 5942 2758 0 00:17 ? 00:00:00 pickup -l -t fifo -u
you 6270 1 0 00:26 ? 00:00:00 /opt/kde3/bin/kdesud
you 7256 3188 0 01:50 pts/36 00:00:00 ps -ef
Mittlerweile beinhaltet das Kommando ps unglaublich viele Optionen, die zum Teil systemabhängig sind, weshalb auf jeden Fall die man-Seite von ps zur Rate gezogen werden sollte. Häufig sucht man in der Liste von Prozessen nach einem bestimmten. Diesen können Sie folgendermaßen »herauspicken«:
you@host > ps -ef | grep kamix
tot 3171 1 0 Apr21 ? 00:00:00 kamix
Damit noch nicht zufrieden, will man gern auch gleich die Prozessnummer (PID) erhalten:
you@host > ps -ef | grep kamix | awk '{ print $2; exit }'
3171
Aber so umständlich muss dies nicht sein. Sie können hierzu auch pgrep (sofern vorhanden) verwenden.
pgrep – Prozesse über ihren Namen finden
Im Abschnitt zuvor wurde pgrep kurz angesprochen. Sofern Sie die Prozessnummer eines Prozessnamens benötigen, ist pgrep das Kommando der Wahl.
you@host > pgrep kamix
3171
pgrep liefert zu jedem Prozessnamen die Prozessnummer, sofern ein entsprechender Prozess gerade aktiv ist und in der Prozessliste (ps) auftaucht.
pstree – Prozesshierachie in Baumform ausgeben
Mit pstree können Sie die aktuelle Prozesshierarchie in Baumform ausgeben lassen. Ohne Angabe von Argumenten zeigt pstree alle Prozesse an, angefangen vom ersten Prozess init (PID=1). Geben Sie hingegen eine PID oder einen Loginnamen an, so werden nur die Prozesse des Benutzers oder der Prozessnummer hierarchisch angezeigt.
renice – Priorität laufender Prozesse verändern
Mit dem Kommando renice können Sie im Gegensatz zu nice die Priorität von bereits laufenden Prozessen verändern. Ansonsten gilt auch hier alles schon beim Kommando nice Gesagte. Das Kommando renice wurde bereits in Abschnitt 8.1 beschrieben.
Tipp für Linux Komfortabler können Sie die Priorität laufender Prozesse mit dem Kommando top verändern. Ein Tastendruck (R) fragt Sie nach der Prozessnummer und dem nice-Wert, von welchem Prozess Sie die Priorität verändern wollen.
|
sleep – Prozesse suspendieren (schlafen legen)
Mit sleep legen Sie einen Prozess für n Sekunden schlafen. Voreingestellt sind zwar Sekunden, aber über Optionen können Sie hierbei auch Minuten, Stunden oder gar Tage verwenden.
su – Ändern der Benutzerkennung (ohne Neuanmeldung)
Dieses Kommando wird irrtümlicherweise immer als SuperUser abgekürzt, heißt aber in Wirklichkeit SwitchUser. su hat also zunächst überhaupt nichts mit dem »Superuser« (alias root) zu tun. Dieses Missverständnis resultiert daraus, dass die meisten Anwender dieses Kommando dazu verwenden, sich kurz die Root-Rechte (sofern diese vorhanden sind) anzueignen. Durch die Angabe ohne Argumente wird hierbei gewöhnlich auch nach dem Passwort des Superusers gefragt.
you@host > whoami
you
you@host > su
Password:********
linux:/home/you # whoami
root
linux:/home/you # exit
exit
you@host > whoami
you
you@host > su john
Password:********
you@linux:/home/john> whoami
john
you@linux:/home/john> exit
exit
su startet immer eine neue Shell mit der neuen Benutzer- (UID) und Gruppenkennung (GID). Wie bei einem neuen Login wird nach einem Passwort gefragt. Geben Sie keinen Benutzernamen an, versucht su zu UID 0 zu wechseln, was ja der Superuser ist. Sofern Sie »Superuser« sind, können Sie auch die Identität eines jeden Benutzers annehmen, ohne ein entsprechendes Passwort zu kennen.
sudo – Programm als anderer Benutzer ausführen
sudo ist ein Kommando, womit ein bestimmter Benutzer ein Kommando ausführen kann, wozu er normalerweise nicht die Rechte hat (bspw. für administrative Aufgaben). Dazu legt root gewöhnlich in der Datei /etc/sudoers folgenden Eintrag ab:
john ALL=/usr/bin/kommando
Jetzt kann der User »john« das Kommando mit folgendem Aufruf starten:
you@host > sudo /usr/bin/kommando
Passwort: *********
Nachdem »john« sein Passwort eingegeben hat, wird das entsprechende Kommando ausgeführt, wozu er normalerweise ohne den Eintrag in /etc/sudoers nicht im Stande wäre. Der Eintrag wird gewöhnlich mit dem Editor vi mit dem Aufruf visudo vorgenommen.
Natürlich können Sie als normaler Benutzer auch mittels sudo Programme unter einem anderen Login-Namen ausführen. Dies erledigen Sie mit folgendem Aufruf (hier bspw. das Kommando whoami ausgeführt):
you@host > whoami
you
you@host > sudo -u john whoami
Password:********
john
you@host >
Das Kommando sudo hat bei mir bis vor kurzem eine Art Schattendasein geführt. Wenn ich ein Kommando benötigt habe, dass root-Rechte erfordert, habe ich mich schnell mit su befördert. Mittlerweile allerdings, seitdem ich das immer beliebter werdende »(k)ubuntu« verwende, bei dem es gar keinen root mehr gibt, sondern sudo für solche Zwecke verwendet wird, hat sich das Kommando einen »Stammplatz« erobert. Darauf wollte ich kurz hinweisen, bevor Sie auf die Idee kommen, »(k)ubuntu« nochmals zu installieren, weil Sie vielleicht vermuten, irgendwo das root-Passwort vergessen zu haben. »(k)ubuntu« ist da einfach anders als andere Distributionen.
time – Zeitmessung für Prozesse
Mit time führen Sie das in der Kommandozeile angegebene Kommando bzw. Script aus und bekommen die Zeit, die dafür benötigt wurde zurück. Diese Zeit wird dabei aufgeteilt in die tatsächlich benötigte Zeit (real), die Rechenzeit im Usermodus (user) und diejenige im Kernelmodus (sys). Das Kommando time wurde bereits in Abschnitt 9.6 behandelt.
top – Prozesse nach CPU-Auslastung anzeigen (betriebssystemspezifisch)
Mit top bekommen Sie eine Liste der gerade aktiven Prozesse angezeigt. Die Liste wird nach CPU-Belastung sortiert. Standardmäßig wird top alle fünf Sekunden aktualisiert; beendet wird top mit (Q). top kann aber noch mehr, als die Auslastung der einzelnen Prozesse anzuzeigen, beispielsweise können Sie mit dem Tastendruck (K) (kill) einem bestimmten Prozess ein Signal senden oder mit r (renice) die Priorität eines laufenden Prozesses verändern. Ein Blick auf die man-Seite von top bringt außerdem noch einen gewaltigen Überblick zu diesem auf den ersten Blick einfachen Kommando zum Vorschein.
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.
|