Arka plandaki işlemler neden bazen kendiliğinden durur?


10

Bazen, bir işlemi bgbash ile arka planladıktan sonra bir süre sonra , istemi yeniden görüntülemek için aynı kabukta Enter tuşuna bastığımda (sadece arka plan işleminden bir çıktı görüntülendiğinde hala bash olduğumu kontrol etmek için), arka plan süreci kendiliğinden durmaktadır.

Tekrar yaparsam bgaynı sorun tekrar eder.

Düzeltmenin tek yolu öyle görünüyor fg.

Bu neden oluyor?


Çıktınız nereye gidiyor? Bir yere tampon dolduruyor musunuz?
Paul Tomblin

Yanıtlar:


12

Bu genellikle süreç stdinakışından okumaya çalışırsa olur . İşlem arka planda olduğunda, bir TTIN sinyali alır ve böylece dondurulur (bir DUR sinyali ile aynı davranış). Bir arka plan işlemi terminaline yazmaya çalıştığında ikili sinyal TTOU da vardır .

Ön plana getirilmesi işlemi sürdürür ve terminalinizden okumasına izin verir.

Demo:

$ cat t.sh
#! /bin/sh
sleep 1
read dummy
$ ./t.sh &
[1] 3364
$ 
[1]+  Stopped                 ./t.sh
$ ps aux|grep t.sh
me  3364  0.0  0.0  11268  1200 pts/0    T    17:04   0:00 /bin/sh ./t.sh

Bundan kaçınmanın yollarından biri kullanmaktır nohup, ancak program giriş akışının yeniden yönlendirilmesini ele almazsa bunun garip etkileri olabilir /dev/null.

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.