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, SIGHUP
iş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 disown
sonra ekle&
En güvenilir yöntem gibi görünüyor:
(setsid emacs &)
Bu, ( &)
arka plana çatal yapmak setsid
ve kontrol tty'sinden ayırmak için kullanılır.
Bunu bir kabuk fonksiyonuna koyabilirsiniz:
fork() { (setsid "$@" &); }
fork emacs
Olasılıklar:
disown
Yerleşik komutu:
emacs &
disown $!
&
komut ayırıcı olarak işlev görür disown
ve 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 setsid
bir sh
senaryoda 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 -r
kullanı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ı.