Yanıtlar:
Bunun bir X uygulaması mı yoksa bir konsol uygulaması mı çalıştığını söylemiyorsunuz.
Bir konsol uygulaması olarak ise, elbette kapatmak gerekiyor. Girdi / çıktıdan kurtuldunuz, daha teknik olarak açık (sahte) tty. Demek istediğin bu pek olası değil, o yüzden bir X uygulaması hakkında konuştuğunu varsayalım.
nohupçalışmalı, neden olmadığından emin değil. Kabuk kapandığında, SIGHUPişlem grubundaki tüm işlemlere gönderir . nohup, komuta SIGHUP'ı yoksaymasını söyler.
Süreci süreç grubundan ayıran setsid'i de deneyebilirsiniz
alias emacs='setsid emacs'
Veya disownsonra ekle&
En güvenilir yöntem gibi görünüyor:
(setsid emacs &)
Bu, ( &)arka plana çatal yapmak setsidve kontrol tty'sinden ayırmak için kullanılır.
Bunu bir kabuk fonksiyonuna koyabilirsiniz:
fork() { (setsid "$@" &); }
fork emacs
Olasılıklar:
disownYerleşik komutu:
emacs &
disown $!
&komut ayırıcı olarak işlev görür disownve en son işe varsayılan olur, bu nedenle bu kısaltılabilir:
emacs & disown
Çift- fork():
(emacs &)
Parantez içindeki komutlar ( )ayrı bir kabuk işleminde çalıştırılır.
setsid, Rich'in önerdiği gibi, en iyi seçenek olabilir, çünkü yeni bir oturum oluşturarak sürecin kontrol TTY'sini belirliyor :
setsid emacs
Bununla birlikte, aynı zamanda biraz da tahmin edilemez - sadece fork()bir süreç grubunun lideriyse ( örneğin setsidbir shsenaryoda kullanıldığında gerçekleşmeyecektir , örneğin; bu gibi durumlarda sadece Ctrl- C)
(exec emacs)işe yarar mı?
(emacs). Alt kabuğa tek bir komut verildiyse exec, en azından durumunda belirtilir bash. Aynısı bash -c 'foo'versus için de geçerlidir bash -c 'exec foo'. (Bununla birlikte, not Emacs bu kendisini uç ayrılmakta olduğu;.., Örneğin, gvim, yapar Bu bilinen davranışı olan bir program ile daha iyi bir test etmek için olan)
Kabuk ayarlarını kontrol et. Bunun yerine ekranı da deneyebilirsiniz nohup.
screen -rkullanırsanız Ctrl-A Ctrl-D, daha sonra işleme geri dönmenizi sağlar .
screen -d -m sh -c "{do stuff } exit"çok daha mantıklı.