Laufenden Prozess in den Hintergrund schieben

Du suchst ein Programm für einen bestimmten Zweck?
Antworten
spaceship
Beiträge: 83
Registriert: 19.06.2010 07:56:37

Laufenden Prozess in den Hintergrund schieben

Beitrag von spaceship » 05.04.2013 15:30:31

Hallo,

mit der Tastenkombination STRG + z kann man ja einen laufenden Prozess anhalten und in den Hintergrund schieben. Gibts auch die Möglichkeit ihn einfach in den Hintergrund zu schieben, ohne ihn anzuhalten (ich spreche von einem bereits laufenden Prozess - die Mögichkeiten mit & sowie fg und bg fallen also denke ich mal weg).
WHEEZY amd64: AMD X2 BE-2400, Nvidia Geforce GT-9800 green
JESSIE amd64: Levono x201 Laptop

spaceship
Beiträge: 83
Registriert: 19.06.2010 07:56:37

Re: Laufenden Prozess in den Hintergrund schieben

Beitrag von spaceship » 05.04.2013 15:52:53

Hmmm, kann es sein, das ein Prozess durch STRG + z garnicht in den Hintergrund gelegt sondern nur angehalten wird, und eine Jobnummer bekommt?
WHEEZY amd64: AMD X2 BE-2400, Nvidia Geforce GT-9800 green
JESSIE amd64: Levono x201 Laptop

DeletedUserReAsG

Re: Laufenden Prozess in den Hintergrund schieben

Beitrag von DeletedUserReAsG » 05.04.2013 16:28:03

Ja, und mit bg lässt er sich dann in den Hintergrund schieben.

cu,
niemand

uname
Beiträge: 12469
Registriert: 03.06.2008 09:33:02

Re: Laufenden Prozess in den Hintergrund schieben

Beitrag von uname » 05.04.2013 17:16:01

Wenn dir vorher klar ist dass derr Prozess im Hintergrund landen soll schau dir screen oder tmux an. nohup kann auch interessant sein.

charno
Beiträge: 636
Registriert: 28.06.2004 20:24:34

Re: Laufenden Prozess in den Hintergrund schieben

Beitrag von charno » 05.04.2013 17:16:59

oder einfach ein & hinter den Befehl schreiben.
"Wer sich nicht bewegt, spürt seine Fesseln nicht." - Rosa Luxemburg

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: Laufenden Prozess in den Hintergrund schieben

Beitrag von Cae » 05.04.2013 17:27:06

charno hat geschrieben:oder einfach ein & hinter den Befehl schreiben.
spaceship hat geschrieben:(ich spreche von einem bereits laufenden Prozess - die Mögichkeiten mit & sowie fg und bg fallen also denke ich mal weg)
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

exubuntu
Beiträge: 169
Registriert: 29.03.2013 22:25:44

Re: Laufenden Prozess in den Hintergrund schieben

Beitrag von exubuntu » 05.04.2013 18:14:22

charno hat geschrieben:oder einfach ein & hinter den Befehl schreiben.
was je nach shell und deren config auch boese beim beenden shell enden kann

charno
Beiträge: 636
Registriert: 28.06.2004 20:24:34

Re: Laufenden Prozess in den Hintergrund schieben

Beitrag von charno » 05.04.2013 18:23:56

Naja, nicht böser als Ctrl+z und bg, oder? die Prozesse werden in beiden Fällen als Jobs von der Shell behandelt und mit dieser beendet, soweit ich das verstehe.
"Wer sich nicht bewegt, spürt seine Fesseln nicht." - Rosa Luxemburg

spaceship
Beiträge: 83
Registriert: 19.06.2010 07:56:37

Re: Laufenden Prozess in den Hintergrund schieben

Beitrag von spaceship » 06.04.2013 08:18:13

Terminal-Multiplexer für diese doch recht spartanische Aufgabenstellung einzusetzen finde ich etwas "too much".

Also nohup kommt noch am ehesten in Frage, wobei man auch hier schon im Vorfeld wissen muss, welchen Job man vom Terminal abkoppeln will. Zudem kann nohup standardmäßig nur von root voll eingesetzt werden. Dazu eine Zwischenfrage: Hat jemand eine Idee, wie man das elegant ändern könnte, ohne gleich den chmod 777 drauf anzusetzen.

Was noch interessant klingt ist das bash builtin

Code: Alles auswählen

disown
was mit der Option -h so ziemlich genau das macht, was ich will - nur leider im Standard auch nur vom root unbeschränkt eingesetzt werden kann.

Quelle: http://blog.tromm.net/2010/05/21/unix-p ... losgelost/
Zuletzt geändert von spaceship am 06.04.2013 09:47:32, insgesamt 1-mal geändert.
WHEEZY amd64: AMD X2 BE-2400, Nvidia Geforce GT-9800 green
JESSIE amd64: Levono x201 Laptop

Benutzeravatar
whisper
Beiträge: 3385
Registriert: 23.09.2002 14:32:21
Lizenz eigener Beiträge: GNU Free Documentation License
Kontaktdaten:

Re: Laufenden Prozess in den Hintergrund schieben

Beitrag von whisper » 06.04.2013 09:35:47

disown ist auch ein bash buitlin.
eh brauche das häufiger.
http://zockertown.de/s9y/index.php?/arc ... tzen!.html
Alter ist übrigens keine Ausrede, nur Erfahrung, die sich stapelt. 😉

pferdefreund
Beiträge: 3799
Registriert: 26.02.2009 14:35:56

Re: Laufenden Prozess in den Hintergrund schieben

Beitrag von pferdefreund » 08.04.2013 07:23:35

Für die, die ein bisserl c können - da hab ich mir selbst was kleines für geschrieben - macht erst nen fork um sich von der shell zu lösen und dann einen system(...) und gut is. Läuft seint ca 3 Jahren ohne Probleme.

#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <tzn.h>
#include <unistd.h>
#include <libpferd.h> // das hier raus und weiter unten bei nonewline schauen geht sicherlich auch anders
// aenderung am 01.03.2013
// automatisches ergaenzen &
int rc;
char cmdtab[20][256];
char cmd[1024];
int itab;
int pid;
int cmdlength;
int main(int argc, char *argv[]) {
#include <tzp.h>
if (argc > 20) {
rc = 1;
printf("Zu viele Argumente\n");
exit (rc);
}
if (argc < 2) {
rc = 1;
printf("Bitte Programm mit Parametern eingeben, dass als\n");
printf("Hintergrundprozess laufen soll\n");
exit(rc);
}
strcpy(cmd,"");
itab = 1;
while (itab < argc) {
strcat(cmd,argv[itab]);
nonewline(cmd); // hier haendig anpassen - nonewline ist aus libpferd
strcat(cmd," ");
itab = itab + 1;
}
printf(cmd);
cmdlength=strlen(cmd);
/* - 2, weil weiter oben noch */
/* ein space angehaengt wird */
cmdlength=cmdlength - 2;
if (cmd[cmdlength] == '&') {
printf("& schon vorhanden - nix zu tun");
}
else {
strcat(cmd," &");
printf("%s%s","Cmd changed:",cmd);
}
printf("\n");
pid = fork();
if (pid > 0) {
printf("\n");
return 0;
}
rc = system(cmd);
return rc;
}

Antworten