Eu sei nohup
e não vai fazer o que eu quero:
Exemplo:
$ 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
Como você pode ver, o sono ainda tem pts/9
como um terminal de controle. Não quero que ele tenha nenhum terminal de controle. Em parte porque o programa que eu quero usar (não é sleep
se você não adivinhou) tenta abrir o terminal de controle para me fazer perguntas e eu quero ver como ele se comporta se não puder. Como faço isso acontecer?
fonte
at now
funciona. Isso é melhor do que o meu "Você não pode fazer isso". responda.setsid
.O utilitário
setsid
no Linux pode fazer isso. No Fedora, faz parte doutil-linux
pacote. Este é o mesmo pacote que contém coisas comomount
,mkfs
,/usr/bin/kill
, e outras coisas semelhantes.fonte
Você também precisa usar
disown
para desanexar o processo do tty.https://unix.stackexchange.com/questions/3886/difference-between-nohup-disown-and
Tente correr
nohup sleep 600 2>/dev/null >/dev/null </dev/null& disown
e veja se isso lhe dá o resultado desejado.fonte
TTY
coluna. Eu testei mesmo que não esperassedisown
ter efeito. Descartar o terminal de controle é algo que deve ser feito quando um processo é iniciado no AFAIK.python3
processo sem terminal de controle:sh -c 'nohup python3 -c "import os, time; time.sleep(5); os.setsid(); time.sleep(600)" &' </dev/null >/dev/null 2>/dev/null &