Çalışan bir betiği bir terminal oturumundan kurtarma


35

Bu yüzden birden çok çalışan komut dosyasını / programı yönetmek için GNU Ekranını kullanıyorum . Çoklama ve ayrılabilirlik oldukça yararlıdır.

Bir betiği diskten kaldırdım ve şimdi yedeği bulmakta sorun yaşıyorum. Ancak, terminal oturumlarından biri dosya silinmeden önce betiği yürütüyordu ve gayet iyi çalışmaya devam ediyor.

Şu anda bu dosyanın içeriğini kurtarmak için komut dosyasını çalıştıran terminal oturumunu kaçırmanın bir yolu var mı?


Yanıtlar:


61

kullanarak betiğin yardımını arayın ps

ps -ef|grep script.sh
Fdo  8983  8463  0 12:28 pts/2    00:00:00 /bin/bash ./script.sh

kontrol edin /proc/$PID/fd/; script dosyasına bozuk bir link cat olmalı , fakat çalışmalı (script çalışırken!):

cat /proc/8983/fd/255 
#!/bin/bash
# script contents!

iyi şanslar!


@mrc Bu çalışma, dosyaların içeriği bellekte yüklü olduğu için düşünüyorum
c4f4t0r 20:17

Harika öneri! Ayrıca, fdo'nun iyi bir yedekleme rutini oluşturması gerektiğine dair bir uyarı, çünkü bir dahaki sefere o kadar şanslı olmayabilir.
Criggie

12
@ c4f4t0r Belleğe yüklenip yüklenmeyeceği ile ilgisi yok. Linux açık tutma kolları varken açıkça bir dosyayı (inode) kaldırmaz - dosya diskte kalır ve yer kaplar. rmve diğer araçları bağlantısını kaldırmak dosyasından bağlantıyı kaldırarak, dosyayı adıyla (inode'un tarafından başvurulan) fiili verilere ancak bu süre bir referans inode silinmez (sert bağlantı veya açık tanıtıcı) var olduğu.
Bob,

Sadece merak ediyorum ... fd 255'i kontrol etmeyi nasıl bildin? Yoksa bu sadece bir örnek mi?
gardenhead,

2
@gardenhead Bu bir örnek.
user253751
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.