Her şeyden önce; Bir işlemi başlattıktan sonra, önce durdurup (isabet Ctrl- Z) sonra bg
da arka planda devam ettirmek için yazarak arka planı yapabilirsiniz. Şimdi bir "iş" ve stdout
/ stderr
/ stdin
hala terminalinize bağlı.
İşlemin sonuna "&" ekleyerek, hemen arka plandaki bir işlemi başlatabilirsiniz:
firefox &
Susturulmuş arka planda çalıştırmak için şunu kullanın:
firefox </dev/null &>/dev/null &
Bazı ek bilgiler:
nohup
Uygulamanızı stdout / stderr dosyasının bir dosyaya gönderilebileceği ve ana betiği kapatmanın çocuğu YUKARMAYACAĞI bir şekilde çalıştırmak için kullanabileceğiniz bir programdır . Ancak, uygulamaya başlamadan önce onu kullanma öngörüsünüz olması gerekir. Yolu yüzünden nohup
işleri, sadece olamaz Çalışan bir süreç uygulamak .
disown
bir kabuk işini kabuğun iş listesinden silen bir bash yerleşimidir. Bunun temel olarak anlamı, artık üzerinde kullanamayacağınız fg
, bg
ancak daha önemlisi, kabuğunuzu kapattığınızda, SIGHUP
artık o çocuğa asılmayacağı ya da göndermeyeceğidir . Aksine nohup
, işlem başlatıldıktan ve arka plana alındıktan sonradisown
kullanılır .
Ne edemez yapmak, bunu başlattıktan sonra bir sürecin stdout'u / stderr / Stdin değiştirmektir. En azından kabuktan değil. İşleminizi başlatır ve stdout'unun sizin terminaliniz olduğunu söylerseniz (varsayılan olarak yaptığınız gibi), o zaman bu işlem terminalinize çıkış yapacak şekilde yapılandırılır. Kabuğunuzun işlemlerin FD kurulumu ile ilgisi yok, bu tamamen sürecin yönettiği bir şey. Sürecin kendisi stdout / stderr / stdin'in kapatılıp kapatılmayacağına karar verebilir, ancak bunu yapmak için kabuğunuzu kullanamazsınız.
Bir arka plan süreci 'çıktısını yönetmek için, muhtemelen akla gelen ilk "nohup" olan betiklerden birçok seçeneğiniz vardır. Ancak etkileşimli işlemler için başlıyorsunuz ama sessizliği unuttum ( firefox < /dev/null &>/dev/null &
), gerçekten fazla bir şey yapamazsınız.
GNU’yu almanı öneririm screen
. Ekran ile işlem 'rahatsız edici hale geldiğinde yenisini açınca ( ^Ac
) yeni çalışan kabuğunuzu kapatabilirsiniz .
Oh, ve bu arada, kullandığın $@
yerde " " kullanmayın.
$@
anlamına gelir $1
, $2
, $3
..., içine komutu açacak:
gnome-terminal -e "vim $1" "$2" "$3" ...
Muhtemelen istediğin şey bu değildir çünkü -e sadece bir tartışma alır . $1
Komut dosyanızın yalnızca bir bağımsız değişkeni işleyebileceğini göstermek için kullanın .
Verdiğiniz senaryoda doğru şekilde çalışan çoklu argümanları elde etmek gerçekten zor ( gnome-terminal -e
çünkü), çünkü -e
bir kabuk komut dizesi olan tek bir argüman alıyor. Argümanlarınızı birebir kodlamak zorundasınız. En iyisi ve en sağlamı, ama oldukça cansız, yolu şöyle:
gnome-terminal -e "vim $(printf "%q " "$@")"