Kann ich es irgendwie rückgängig machen, wenn ich disown
einen Job habe bash
und meine Meinung ändere?
Wenn ja, ist es möglich, einen beliebigen Prozess unter Jobkontrolle zu bringen (eine akzeptable Einschränkung wäre, dass ich den Prozess besitze)?
Und schließlich würde dies den folgenden Workflow ermöglichen:
- Job in den Hintergrund stellen (
^z
gefolgt vonbg
) - Holen Sie sich seine PID (
jobs -p %+
um seine zu bekommen<pid>
) - Öffnen Sie eine
screen
odertmux
Sitzung, hängen Sie sie an und verwenden Sie sie für die folgenden Schritte - Verwenden Sie
reptyr
, um den Job zu ergreifen (reptyr <pid>
) <pid>
zur Jobsteuerung der Shell hinzufügen ( ist das überhaupt möglich? )- beende den Job (
^Z
)
Ich kann alles außer den letzten beiden Schritten tun. Das Stoppen des Jobs mit ^Z
funktioniert nicht, da der Prozess nicht in der Jobliste der Shell enthalten ist.
Meine Forschung zeigt, dass es nicht möglich ist, eine PID zu besitzen (umzukehren disown
), aber hoffentlich irre ich mich ...
SIGSTOP
perkill
Befehl ein Signal senden .bg
einen Job in den Hintergrund stellen, wird seine Prozess-ID "in der aktuellen Shell-Ausführungsumgebung bekannt" , als wäre er als asynchrone Liste gestartet worden . Siehe Asynchrone Listen . Aber auf jeden Fall sollten Sie, wenn Sie so weit gehen und sich hauptsächlich auf Linux zu konzentrieren scheinen, wahrscheinlich nur mit Namespaces arbeiten .^Z
war nur ein Beispiel für etwas , das nicht möglich ist , ohne das es im Besitz von dem Shell. Ich glaube nicht, dass Ihr Kommentar der Frage einen Mehrwert verleiht.Antworten:
Im Allgemeinen ist es einer Shell nicht möglich, einen Job zu „übernehmen“. Für eine Shell bedeutet ein Job ein paar Dinge:
Die meisten davon erfordern keine spezielle Zuordnung zwischen der Shell und dem Job, aber es gibt einige, die dies tun:
Es ist einem Prozess nicht möglich, einen anderen Prozess zu übernehmen oder einen Prozess an eine vorhandene Sitzung anzuhängen. Um die Übernahme zu unterstützen, müsste die Shell einen Teilstatus verwalten. Die üblichen Shells haben dies nicht implementiert.
In dem speziellen Fall, in dem der Job ursprünglich von dieser Shell gestartet und dann abgelehnt wurde, treten diese Probleme nicht auf. Keine der üblichen Shells hat jedoch eine Ausnahme von der Ausnahme implementiert, mit der sie einen Job hinzufügen können, wenn sie ihn ursprünglich gestartet haben.
In Ihrem Szenario ist es normalerweise am bequemsten, den Job in einer Bildschirm- oder tmux-Sitzung zu starten und die PID zu verwenden, wenn Sie ihn anhalten oder fortsetzen möchten.
quelle