GNU ekranında başlatılan bir programı başka bir terminale taşıyın


21

Bir GNU örneğini sonlandırmak istiyorum, screenbunun içinde çalışan süreci korurken.

Böylece normal terminal emülatör programımı açtım ve ekranı çalıştırdım. Sonra bu örneği screenyürütmek için kullandım ./script_x.sh. Şimdi, ne sebeple olursa olsun, kullanmaktan vazgeçmek istiyorum screenancak script_x.shgörevini henüz tamamlamadım ve ilerlememi kaybetmek istemiyorum.

Normal terminal emülatörümde üzerinde çalışmaya devam edebilmek için aktif işlemi canlı tutabilir miyim?


14
Gerçekten ekranı öldürmek mi istiyorsun yoksa ondan çıkarmak mı istiyorsun? Ekran, normal oturumunuza devam edebilmeniz için arka planda bir işlem yürütmek için kullanılır, aynı zamanda oturumu kapattıktan sonra uygulamaların çalışmaya devam etmesini sağlar (örn. SSH oturumunun bağlantısını kesin). Her zaman ekrandan ayırabilir, normal oturumunuza devam edebilir ve ekran oturumunda bıraktığınız yerden devam edebilirsiniz. Terminal emülatörünüzün bununla hiçbir ilgisi yok.
BlueCacti

Veya sadece screenoturum içinde başka bir ekran oluşturun .
chrylis -on grev-

11
Bu soru XY Problemi gibi kokuyor .
Dijital Chris

7
@ tjt263 - ilk etapta ekranı kullandığınız için pişman olduğunuzu söylüyorsunuz. Öyleyse ekranı kullanmasaydınız sürecin devam etmesini sağlamak için ne yapardınız? Ekrandaki işlemle aynı şeyi yine de yapabilirsiniz, ancak ekranın ilave avantajı vardır; bundan ayrılabilir ve işleminizin bozulmadan çalışmasına izin verebilirsiniz.
Johnny

@DigitalChris Şimdi yapabilir. Orijinal unvanın muhtemelen daha alakalı olduğunu düşünüyorum. 3 ayrı nokta var: İçinde bir program çalıştırıyordum screen. Kullanmayı bırakmak istedim screen. İçeride çalışan programı durdurmak istemedim screen. Bu kadar. Durumu nasıl netleştireceğimi veya bundan daha basit bir şekilde nasıl ifade edeceğimi bilmiyorum.
seslendirir

Yanıtlar:


31

TLDR: Pratik cevap: Hayır.

Daha uzun cevap:

Teoride yapabilirsin. Eğer gibi bir şey başladı nohup myprog &ekrandan içinden o zaman yayınlanmaya devam eder. Bir kapatma sinyalini görmezden gelecek ve herhangi bir girişi olmayacak, ancak teoride onunla çalışmaya devam edebilirsiniz.

Uygulamada bu durum böyle değil. Bu nedenle, çalışan sürece bir hata ayıklayıcı eklemek ve dosya tanıtıcılarını yeniden yazmak ve ekranı kapattığınızda işlemin -1 sinyalleri işlediğinden emin olmak istemiyorsanız ... o zaman cevap hayır.

Bunu yapmaya hazırsanız, evde birisinin tam olarak yaptığı [SU] 'ya işaret eden bir yer imi var . Yaptığı kolaylık ve önemsizlikten ötürü, görkemsizlik için kaydedilir.


Sorunun cevabınızdan bu yana toplu olarak düzenlendiğini unutmayın.
chrylis

Bir işlemin bağlantısını kesmek oldukça basittir - bu süreç gruplarının ayarlanması sorunudur ( disownalt ya da üst düzeyde), böylece SIGHUPana süreç öldüğünde gönderilmeyecektir. G / Ç'yi yeniden bağlamak tamamen başka bir şeydir
alexis

Buna gerek yok nohup, bir iş denetim kabuk (gibi iseniz bash, ksh, csh, zsh, ash, vb.) Hala Bourne gibi iş dışı bir kontrol kabuğu kullanıyorsanız, shbelki de yükseltme zamanı gelmiştir.
civcivler

23

reptyrÇalışmakta olan uygulamayı farklı bir terminale tekrar bağlamak için kullanmayı deneyebilirsiniz . Yine de arka plana gönderme işlemi ile ilgili bazı sorunları var.

Sadece test ettim ( htopiçeri gir screen, reptyrbaşka bir terminale başla , öldür screen) ve iyi çalışıyor gibiydi. Yine de bu gerçekten hack bir çözüm, bu yüzden hiçbir garanti.


1
Gdb kullanmaktan daha az hack :)
Hennes

14

Evet (eğer "öldürmek" gerçekten öldürmüyorsa), aslında tam olarak ekran bunun için. Kılavuzu kontrol etmeli ve bunlardan hangisinin ihtiyaçlarınızı karşıladığını denemelisiniz:

C-a d
C-a C-d     (detach)      Detach screen from this terminal.

C-a D D     (pow_detach)  Detach and logout.

Öyleyse, ihtiyacınız olan şey, tercihinize bağlı olarak ekranın -D / -d -R / -r komut satırı seçenekleri.


1
Bu soruya cevap vermiyor. OP ekrandan ayrılmak istemiyor, ekran işlemini sonlandırmak istiyor.
Guntram Blohm,

6
Evet, bunu yazdı ama ne istediğini sorduğundan emin değilim.
Gombai Sándor

11
@GuntramBlohm OP'nin ekranın nasıl çalıştığını anladığı ve bu en olası istenen efekt olduğu konusunda net değil.
chrylis -on grev-

2
Ekranın xterm'den farklı bir terminal değil, başka bir terminalden çıkardıktan sonra gerçek terminalinize (vterm, xterm, terminator, (m) rxvt, herhangi biri) takılabilen bir katman (sözde terminal) olduğunu biliyor musunuz? Ve ekran, sürecinizin devam etmesini sağlayan şeydir, onu ekranın içinde başlattınız (ve bunu iyi yapıyor). Öldürürseniz (gerçekten öldürürseniz), o zaman halınızı işleminizin altından çekersiniz ... Neden böyle yapabileceğinize dair iyi bir sebep görmüyorum.
Gombai Sándor

1
@ GombaiSándor: Bunu yapmak istemenin bir nedeni , ekranın bilmediği yeteneklerden geçmek için sürecin doğrudan bir terminale konuşmasını sağlamaktır. Örneğin, bir keresinde klavyemdeki tüm tuhaf fonksiyon tuşlarının, bir VT102 gibi davranmaya çalışmak yerine X11 keysym ve tam değiştirici durumunu içeren kaçış dizileri göndermesini sağlamak için kendi xterm versiyonumu hackledim ve kurmaya başladım. emacs onlar için anahtarlıklar. Bu diziler ekrandan zarar görmeden geçmezdi.
Henning Makholm
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.