Dieser Beitrag kann helfen. Die Empfehlung lautet:
- Hintergrund der Prozess (mit Strg-Z, dann bg )
- run disown -h% [jobid] (wahrscheinlich ein bash-ism, also musst du für tcsh übersetzen)
Die schlechte Nachricht ist natürlich, dass das bg in der gleichen Shell ausgeführt werden muss, in der der Prozess ausgeführt wird ... aber es könnte bereits ein Hintergrund sein.
Die wirklich schlechte Nachricht ist, dass der Disown- Aufruf möglicherweise in derselben Shell ausgeführt werden muss. In diesem Fall sind Sie ja vermasselt. Aber ich bin mir nicht sicher, vielleicht kann root es zwingen, es zu trennen.
Hmm. Mögliche gute Nachricht - Tcsh das tut disown automatisch:
Wenn tcsh nicht normal beendet wird, werden Aufträge, die im Hintergrund ausgeführt werden, beim Beenden automatisch deaktiviert.
Wenn Ihr langfristiger Prozess also bereits im Hintergrund ist, sollte das Töten seines tcsh-übergeordneten Elements möglicherweise fortgesetzt werden. Der Prozess ist jetzt vom Startterminal getrennt. (Wenn nicht, siehe oben "schlechte Nachrichten".)
Leider ist dies kein Bildschirm, daher gibt es keine echte Neuverbindung. Sie können es vielleicht mit gdb fälschen (wieder ab dem ersten Link):
[...] Mit einigen schmutzigen Hacks ist es nicht unmöglich, einen Prozess 'stdout / stderr / stdin' wieder zu öffnen.
Sie können also immer noch ein leeres Bildschirmfenster erstellen (zum Beispiel, das den Ruhezustand ausführt).
Und dann verwenden Sie gdb zum Beispiel zum Anhängen an den Prozess. Führen Sie einen Anruf aus. Close (0)
call close (1)
call close (2)
call open ("/ dev / pts / xx", ...)
call dup (0)
call dup (0)
trennen abDie Ausgabe des Prozesses würde auf dem Bildschirm erscheinen. Es würde nicht an dieses Bildschirm-Terminal angeschlossen werden, so würde [sic] zum Beispiel den Befehl "sleep" beenden, nicht den Prozess, aber das könnte für das OP ausreichen.
Ich frage mich, ob es nicht auch "call dup (1)" und "call dup (2)" in diesem Prozess geben sollte ...