Metode yang paling andal tampaknya adalah:
(setsid emacs &)
Ini menggunakan ( &)
untuk bercabang ke latar belakang, dan setsid
untuk melepaskan dari tty pengendali.
Anda dapat menempatkan ini dalam fungsi shell:
fork() { (setsid "[email protected]" &); }
fork emacs
Kemungkinannya adalah:
-
disown
perintah bawaan:emacs & disown $!
&
bertindak sebagai pemisah perintah, dandisown
akan default ke pekerjaan terbaru, sehingga ini dapat disingkat menjadi:emacs & disown
-
Gandakan-
fork()
:(emacs &)
Perintah di dalam tanda kurung
(
)
dijalankan dalam proses shell terpisah. -
setsid
, seperti yang disarankan oleh Rich, mungkin merupakan pilihan terbaik, karena ini membatalkan penyetelan TTY pengontrol proses dengan membuat sesi baru:setsid emacs
Namun, ini juga sedikit tidak dapat diprediksi - hanya akan
fork()
ke latar belakang jika pemimpin grup proses (yang tidak akan terjadi jikasetsid
digunakan dalamsh
naskah, misalnya; dalam kesempatan seperti itu hanya akan menjadi resisten terhadap Ctrl-C.)
Anda tidak menyebutkan apakah ini berjalan sebagai aplikasi X atau aplikasi konsol.
Jika sebagai aplikasi konsol, tentunya harus ditutup. Anda membuang input/outputnya, lebih teknis (pseudo) tty yang aktif. Sangat tidak mungkin ini yang Anda maksud, jadi anggap saja Anda sedang membicarakan aplikasi X.
nohup
harus bekerja, tidak yakin mengapa tidak. Ketika shell ditutup, ia mengirimkan SIGHUP
untuk semua proses dalam kelompok prosesnya. nohup memberi tahu perintah untuk mengabaikan SIGHUP.
Anda juga dapat mencoba setsid, yang memutus proses dari grup proses
alias emacs='setsid emacs'
Atau tambahkan disown
setelah &
Periksa pengaturan shell Anda. Anda juga dapat mencoba screen daripada nohup
.