in aktiven Prozess remote aufschalten (mit tmux möglich?)

Einrichten des lokalen Netzes, Verbindung zu anderen Computern und Diensten.
Antworten
Benutzeravatar
pangu
Beiträge: 1400
Registriert: 15.11.2011 20:50:52
Lizenz eigener Beiträge: GNU General Public License
Wohnort: /proc/1

in aktiven Prozess remote aufschalten (mit tmux möglich?)

Beitrag von pangu » 02.09.2012 14:52:13

Hallo DF,

ich kenne tmux, jedoch weiß ich nicht ob und wie das möglich wäre. Kann ich folgendes erreichen?

Auf HostA läuft grad beispielsweise eine Installation, die ich nicht abbrechen möchte. Ich würde aber gerne die Installation von einem anderen HostB weiterführen können. Hätte ich vorher die Installation in einer tmux-session gestartet, könnte ich das ja problemlos machen.

Aber tmux oder session ist auf HostA nicht vorhanden und der Installationsprozess läuft schon. Gib's denn eine Möglichkeit? Geht es wenn ich mit STRG+Z den aktiven Installationsprozess in den Hintergrund verschiebe, und mich dann vom HostB per SSH einlogge und auf HostB "fg" eingebe um den Backgroundprozess wieder hervorhole?

Oder was gibt es sonst für Möglichkeiten hierzu ? Freue mich auf euer Feedback. Danke.
Man gibt Geld aus, das man nicht hat, um damit Dinge zu kaufen, die man nicht braucht, um damit Leute zu beeindrucken, die man nicht mag.

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

Re: in aktiven Prozess remote aufschalten (mit tmux möglich?

Beitrag von Cae » 03.09.2012 00:52:16

Das SIGTSTP, fg, bg und so weiter sind alles Funktionen der aktuellen Shell. Der Prozess bleibt ein Kindprozess der Shell, man kommt da nicht mehr so ohne weiteres dran, auch wenn es *eigentlich* kein Problem waere. Man braucht ja "nur" alle Dateideskriptoren der Originalshell zu klauen und in der tmux-Session anzubinden.

Probehalber mal den Kram umleiten:

Code: Alles auswählen

% cat </proc/27417/fd/1 >/proc/27417/fd/0
27417 ist eine Shell, sobald ich mich da so einklinke, verhält sie sich anders:

Code: Alles auswählen

$ 
$ 
$ 
$ 
$ 


$ 


$ 


$ 
Also passiert schon *irgendwas*. Das cat stirbt auch, wenn die Shell zu geht. Wie man daraus ein funktionierendes Rezept ableitet, um eine Session zu kidnappen, weiß ich allerdings nicht. Idee: Man kann auf's PTY gucken… okay, nix is, verhält sich ähnlich wie oben. Vermutlich ist stdin und das PTY so ziemlich dasselbe. Wenn man etwas reinschreibt, bekommt die Shell es zwar mit, besser gesagt, die Anzeige, aber es ist kein Input für die Shell und sie führt nix aus.

Das ist ein interessantes Thema, mein bisheriger Workarround besteht in screen in der ~/.${SHELL}rc.

Gruß Cae
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

Benutzeravatar
pangu
Beiträge: 1400
Registriert: 15.11.2011 20:50:52
Lizenz eigener Beiträge: GNU General Public License
Wohnort: /proc/1

Re: in aktiven Prozess remote aufschalten (mit tmux möglich?

Beitrag von pangu » 03.09.2012 08:14:51

Jo, wie gesagt ... ich frag mich wie das ohne screen und tmux funktionieren könnte. Bin mal gespannt ob jemand 'ne Möglichkeit hierzu kennt.
Man gibt Geld aus, das man nicht hat, um damit Dinge zu kaufen, die man nicht braucht, um damit Leute zu beeindrucken, die man nicht mag.

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

Re: in aktiven Prozess remote aufschalten (mit tmux möglich?

Beitrag von uname » 03.09.2012 09:02:13

Der Prozess bleibt ein Kindprozess der Shell, man kommt da nicht mehr so ohne weiteres dran, auch wenn es *eigentlich* kein Problem waere.
Das sehe ich ähnlich. Auch wenn es generell möglich wäre sieht es UNIX wohl nicht vor, dass ein Kindsprozess einem anderen Prozess übergeben wird (somit sich der Vaterprozess ändert).

Bei Debianscreen bzw. Debiantmux funktioniert es nur, da die Steuerung vom Screen/TMUX-Prozess durchgeführt wird und dieser im Hintergrund unterhalb von "init" immer weiterläuft. Laufende Prozesse sind und bleiben Kindsprozesse von screen/tmux.

Code: Alles auswählen

init-
    |-screen-+-bash---pstree
Bei fg, bg funktioniert es, da der Kindsprozess zur Shell gehört.

Antworten