Ich weiß darüber Bescheid nohup
und es wird nicht das tun, was ich will:
Beispiel:
$ nohup sleep 600 2>/dev/null >/dev/null </dev/null&
[1] 21844
$ ps -ef | fgrep -e 'sleep
> TTY'
UID PID PPID C STIME TTY TIME CMD
me 21844 19313 0 09:37 pts/9 00:00:00 sleep 600
Wie Sie sehen können, hat der Schlaf immer noch pts/9
ein kontrollierendes Terminal. Ich möchte nicht, dass es ein Kontrollterminal gibt. Zum Teil, weil das Programm, das ich verwenden möchte (nicht, sleep
wenn Sie es nicht erraten haben), versucht, das Controlling-Terminal zu öffnen, um mir Fragen zu stellen, und ich möchte sehen, wie es sich verhält, wenn es nicht funktioniert. Wie mache ich das?
quelle
at now
. Das ist besser als mein "Du kannst es nicht machen." Antworten.setsid
.Das Dienstprogramm
setsid
unter Linux kann dies tun. Auf Fedora ist es Teil desutil-linux
Pakets. Dies ist das gleiche Paket , das enthält Dinge wiemount
,mkfs
,/usr/bin/kill
und andere ähnliche Dinge.quelle
Sie müssen auch verwenden
disown
, um den Prozess vom tty zu trennen.https://unix.stackexchange.com/questions/3886/difference-between-nohup-disown-and
Versuchen Sie zu laufen
nohup sleep 600 2>/dev/null >/dev/null </dev/null& disown
und sehen Sie, ob Sie das gewünschte Ergebnis erhalten.quelle
TTY
Spalte. Ich habe es getestet, obwohl ich keinedisown
Wirkung erwartet hatte . Das Löschen des steuernden Terminals muss erfolgen, wenn ein Prozess gestartet wird.python3
Prozess ohne Steuerungsterminal:sh -c 'nohup python3 -c "import os, time; time.sleep(5); os.setsid(); time.sleep(600)" &' </dev/null >/dev/null 2>/dev/null &