Bir kabuk betiği arka planda nasıl çalıştırılır?


Yanıtlar:


93

İstediğinize bağlı olarak, komutun sonuna bir & ekleyin

script.sh &
command &

Bir terminalde çalıştırıyorsanız ve terminali kapatmak istiyorsanız, nohup veya disown'u kullanın.

nohup

nohup script.sh &

sahip çıkmamak

script &
disown

Peşinde olduğunuz şey bu değilse, lütfen sorunuza daha belirgin olun.


Bir şey değil
Panter

Örneğin, 2 htopkomut dosyası çalıştırmam gerekiyorsa ve CPU kullanımını görmek için çalıştırmak istiyorum , ancak sorun şu ki, 1. komut dosyası konsola çıktı oluşturmaya başlar ve diğer eylemleri engelliyor (ikinci komut dosyasını çalıştır, çalıştır htop).
mrgloom

Eğer betiğin basılmış ifadeleri varsa, bunlar benim terminalimde gösterilecek mi?
Charlie Parker,

2

sadece ekranı değiştirip betiğinizi o 2. ekranda çalıştırabilirsiniz. Senaryo 2'de başladığında, 1'e geri dön ve istediğini yap. 2. ekran ekstra "terminal penceresi" olarak arka planda olacaktır. ve ssh bağlantınızı kapattığınızda bile 1. ekrandayken işlemeyi durdurmaz.

screen --help
Use: screen [-opts] [cmd [args]]
 or: screen -r [host.tty]

Options:
-4            Resolve hostnames only to IPv4 addresses.
-6            Resolve hostnames only to IPv6 addresses.
-a            Force all capabilities into each window's termcap.
-A -[r|R]     Adapt all windows to the new display width & height.
-c file       Read configuration file instead of '.screenrc'.
-d (-r)       Detach the elsewhere running screen (and reattach here).
-dmS name     Start as daemon: Screen session in detached mode.
-D (-r)       Detach and logout remote (and reattach here).
-D -RR        Do whatever is needed to get a screen session.
-e xy         Change command characters.
-f            Flow control on, -fn = off, -fa = auto.
-h lines      Set the size of the scrollback history buffer.
-i            Interrupt output sooner when flow control is on.
-l            Login mode on (update /var/run/utmp), -ln = off.
-ls [match]   or -list. Do nothing, just list our SockDir [on possible matches].
-L            Turn on output logging.
-m            ignore $STY variable, do create a new screen session.
-O            Choose optimal output rather than exact vt100 emulation.
-p window     Preselect the named window if it exists.
-q            Quiet startup. Exits with non-zero return code if unsuccessful.
-r [session]  Reattach to a detached screen process.
-R            Reattach if possible, otherwise start a new session.
-s shell      Shell to execute rather than $SHELL.
-S sockname   Name this session <pid>.sockname instead of <pid>.<tty>.<host>.
-t title      Set title. (window's name).
-T term       Use term as $TERM for windows, rather than "screen".
-U            Tell screen to use UTF-8 encoding.
-v            Print "Screen version 4.01.00devel (GNU) 2-May-06".
-wipe [match] Do nothing, just clean up SockDir [on possible matches].
-x            Attach to a not detached screen. (Multi display mode).
-X            Execute <cmd> as a screen command in the specified session.

ctrl+ a, caktif ekran oturumunuzda yeni bir "pencere" oluşturacaktır. Sen (Ansgar belirtildiği gibi) ile birden pencereler arasında geçiş yapabilirsiniz ctrl+ a, nsonraki pencere için ve ctrl+ a, pönceki pencereye için.

ctrl+ a, "size tüm açık pencerelerinizin bir listesini verecektir.

Daha fazla: https://superuser.com/questions/476709/quickly-switching-between-virtual-sessions-screen


1

Komut dizisini kapattıktan sonra kalmasını istiyorsanız, başka bir seçenek de kullanmaktır setsid:

setsid script.sh

Arasındaki farklar hakkında daha fazla bilgi için nohup, disown, &ve setsid: nohup arasındaki fark ve & inkâr

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.