Ön plan işlemini askıya alınmadan arka plana koymak mümkün mü (kontrol + z)?


11

TCP ve UDP paketleri alan ve bu nedenle askıya alınamayan bir uygulama çalıştırıyorum. Intially aynı uygulamanın 3 süreç, farklı argümanlar ile arka plan modunda kullanarak koştu &. Sadece yaptığım zaman $fg, her üç süreç de ön plana çıktı. Şimdi onları tekrar arka plana göndermek istiyorum, ancak askıya alınmadan. Bunu nasıl yapabilirim?


Çalışan bir işlemi yeni bir ekran örneğine taşıma hakkında bir ServerFault konusu -> serverfault.com/questions/55880/…
Alan Barber

Yanıtlar:


10

İlk önce: ön planda sadece bir süreç olabilir , üçünde de değil. fgen son süreci ön plana çıkarır. Ctrl+ zİşlemini yapmak , daha sonra bgsöz konusu uygulamayı "rahatsız etmemek" için daha hızlı yazmak (işlem zamanlayıcısının bunu saniyede birçok kez yapacağına dikkat edin), işlemin PID'sini ön planda, sonra ikinci bir terminalde bulun / SSH oturumu, kullanım

kill -SIGSTOP »pid« ; kill -SIGCONT »pid«

Orijinal terminaliniz söyleyecektir stopped, ancak SIGCONThemen gönderdiğiniz için işlem arka planda çalışmaya devam edecektir.


1
@stefen: çözümünüz ikna edicidir. İşlemimi askıya alırsak, kurulan soket bağlantılarının kesilmediğini varsayarsak, süreçlerime hiçbir şekilde zarar vermeyecektir (zamanlayıcı anahtarlamanın soket bağlantısını kesmediğinden eminim). Bu hata ayıklayacak ve güncellenecektir. Çok teşekkürler. Eğer
rahul.deshmukhpatil

2

Gerçekten bir ön plan işiniz varsa, o zaman bash bunun tamamlanmasını bekliyor, bu bir ön plan işinin tanımı . Eğer bash hala terminalin kontrolüne sahipse, neler olduğunu kontrol edin jobs -l, örneğin:

$ ncat -kl -p 10111 &
[1] 13404
$ ncat -kl -p 10222 &
[2] 13405
$ ncat -kl -p 10333 &
[3] 13406
$ jobs -l
[1]  13404 Running                 ncat -kl -p 10111 &
[2]- 13405 Running                 ncat -kl -p 10222 &
[3]+ 13406 Running                 ncat -kl -p 10333 &

Bunun için üç arkaplan ncatdinleme sürecine başladım . Bir iş durumu için "Bitti" veya "Durduruldu" ifadesini de görebilirsiniz.

Etkili arkaplan kullanarak farklı kabuğundan bir ön plan iş olabilir Stefan Seidel 'ın SIGSTOP / SIGCONT yöntemi (gerçi gönderilen gerçek sinyal ile bir kabuk tarafından Ctrl- ZSIGTSTP olduğunu ya sinyal çalışması gerekir).

Ön plan ve arka plan terimleri kullanıldığında süreçler ve işler arasında ince bir ayrım vardır. Yalnızca bir kabuk ön plan işi vardır, birden çok ön plan işlemi olabilir (bu, terminal işlem grubu kimlikleriyle ilgilidir ve bir boru hattında iki veya daha fazla işlemi başlattığınızda gözlemlenebilir).

Kabuğun kontrolü altındaki çalışan işlemler veya boru hattı "iş" olarak adlandırılır, bgveya fgkomutunu kullandığınızda dolaylı olarak en son işi ifade edersiniz - benim durumumda +yukarıdaki ile olanı . Bu işler (diğer şeylerin yanı sıra) açıkça % 1% 2 veya% 3 (giriş sayısı ) olarak da ifade edilebilir [].

Niteliksiz bir fgkomut yalnızca bir işi, en sonuncusunu etkiler, bu nedenle mevcut durumu anlamanızda yanılıyor olabilirsiniz. Bir arka plan işi olabilir hala terminali yazabilirsiniz:

  echo foo > /dev/tcp/127.0.0.1/10111

Programın terminali nasıl işlediğine, ncatyazma için iyi çalıştığına bağlı olabilir . Gerçi okumak için programlar yürütmeyi durduracak ve bir "Durduruldu" mesajı göreceksiniz. Kabuk süreçleri başlatır ve bir SIGTTIN sinyali çıkmasını veya almasını bekler ( nohupbunun gibi bir yoldur disown).

Belirli bir durdurulmuş işi arka planla

$ bg %3

(benim durumumda hatayı alacağım bash: bg: job 3 already in background)

Aksi takdirde, bir işlem ön plandaysa, program SIGTSTP'yi yakalamaz ve özel bir şey yapmazsa, hızlı ve Ctrl- ile ilgili bir sorun olması olası değildir . Bu konuda ağ programları hakkında özel bir şey yoktur, gelen bağlantılar / veriler çekirdek tarafından arabelleğe alınır (bir noktaya kadar). Akış bağlantısı gözlenebilir bir duraklamaya sahip olabilir.Zbg

Daha fazla ayrıntı için bash man sayfasının " İŞ KONTROLÜ " bölümüne bakın.


1

Bunu yapmanın en kolay yolu ekran programını kullanmaktır . Uygulamanızı sanal terminalde başlatabilir, sonra ekrandan Ctrl + A, D ile çıkabilirsiniz. Oturumunuza devam etmek istiyorsanız, türünüz screen -x. Birden fazla işleminiz varsa, yeniden bağlanacağınız ekranların bir listesi sunulur. Daha fazla bilgi için lütfen ekran kılavuzu sayfasını okuyun .


5
Bence "gerçeğin ardından" bir çözüm arıyor, yani süreçler şu anda çalışıyor.
Stefan Seidel
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.