SSH üzerinde uzun süredir devam eden veri taşıma komut dosyalarının bazı test işlemlerini yapıyorum. Diyelim ki 4 PM civarında bir senaryo çalıştırmaya başladım; şimdi, 6 PM etrafında dönüyor ve bunu yapmamak için kendimi lanetliyorum
screen.
"Geriye dönük" olmanın bir yolu var mı
nohup Bir süreç mi, yoksa bilgisayarımı bütün gece çevrimiçi mi bırakmalıyım? Takılması mümkün değilse
screen / için
nohup zaten başladığım bir süreç, neden? Ebeveyn / çocuk süreçlerinin nasıl etkileştiği ile ilgili bir şey? (En azından 'neden' sorusunu cevaplamayan 'hayır' cevabını kabul etmeyeceğim - üzgünüm;)
Bash kullanıyorsanız, koşabilirsiniz
disown -h job
sahip çıkmamak
disown [-ar] [-h] [jobspec ...]
Seçenek olmadan, her jobspec aktif işlerin tablosundan kaldırılır.
Eğer
-h seçenek verilir, iş
tablodan kaldırılmaz, ancak
SIGHUP gönderilmeyecek şekilde işaretlendi
Kabuk bir iş alırsa iş
SIGHUP. Jobspec mevcut değilse ve
ne de
-a ne de
-r seçenek
Sağlanan mevcut iş kullanılır. Eğer
hiçbir iş ilanı verilmez,
-a
seçenek, tümünü kaldırmak veya işaretlemek anlamına gelir
Meslekler;
-r seçeneği olmayan
jobspec argümanı işlemi kısıtlar
çalışan işlere.
kullanım reptyr
README’den:
reptyr - A tool for "re-ptying" programs.
-----------------------------------------
reptyr is a utility for taking an existing running program and
attaching it to a new terminal. Started a long-running process over
ssh, but have to leave and don't want to interrupt it? Just start a
screen, use reptyr to grab it, and then kill the ssh session and head
on home.
USAGE
-----
reptyr PID
"reptyr PID" will grab the process with id PID and attach it to your
current terminal.
After attaching, the process will take input from and write output to
the new terminal, including ^C and ^Z. (Unfortunately, if you
background it, you will still have to run "bg" or "fg" in the old
terminal. This is likely impossible to fix in a reasonable way without
patching your shell.)
Yazarı tarafından birkaç blog yazısı:
Bir tty'den güncel tty'ye bir işlemi çalmak için bu hack'i denemek isteyebilirsiniz:
http://www.ucc.asn.au/~dagobah/things/grab.c
Mevcut Linux / glibc sürümlerini derlemek için bazı yeniden biçimlendirmeye ihtiyaç duyuyor, ancak yine de çalışıyor.
Bir işlem başladığında, STDIN, STDOUT ve STDERR bağlı bir şey. Genelde, komut başlatıldığında bunu değiştiremezsiniz. Tanımladığınız durumda, muhtemelen ssh oturumuyla ilişkilendirilmiş bir tty'dir. nohup hemen hemen sadece ...
command < /dev/null > nohup.out 2>&1
Yani, STDIN öğesini / dev / null, bir dosyaya STDOUT ve STDOUT STDOUT olarak ayarlar. Ekran, kendisine yönlendirilen ttys'i içeren çok daha karmaşık şeyler yapar.
Geriye dönük olarak nohup veya çalışan bir süreci taramak için hiçbir yol bilmiyorum. / Proc / $ pid / fd dosyasına cd yazarsanız ve 0, 1 ve 2'nin işaret ettiği noktaya bakın.
Reddedilme şansınız olabilir, fakat eğer süreç STDIN, STDOUT veya STDERR ile bir şey yapmaya çalışırsa değil.
Cryopid Grab.c yazmacından gelen ve bir süreci bir dosyaya donduran bir süreçtir, daha sonra işlemi devam ettirmek için (ekran içinde) çalışırsınız.
Ben sadece ekran parçası için neden olmadan basit bir "Hayır" verebiliyorum, sen benim kendi sebebinle ilgilenecektim.
Yine de denedin mi?
disown (bir bash yerleşiği)
~ $ echo $SHELL
/bin/bash
~ $ type disown
disown is a shell builtin
~ $ help disown
disown: disown [-h] [-ar] [jobspec ...]
By default, removes each JOBSPEC argument from the table of active jobs.
If the -h option is given, the job is not removed from the table, but is
marked so that SIGHUP is not sent to the job if the shell receives a
SIGHUP. The -a option, when JOBSPEC is not supplied, means to remove all
jobs from the job table; the -r option means to remove only running jobs.
Solaris / OpenSolaris'teki nohup, çalışan bir işlemi durdurmak için bir -p bayrağına sahiptir - örneğin, bkz. Solaris 10 nohup man sayfası.
Geçenlerde bir bağlantı gördüm neercs, bir renk ascii-art kütüphanesi olan libcaca kullanılarak oluşturulan bir ekran benzeri bir yardımcı programdır. Diğer özelliklerin yanı sıra, varolan bir işlemi ele geçirme ve neercs (ekran) oturumunuzun içine yeniden yerleştirme yeteneğine sahiptir.
Ancak kullanmıyorum, bu yüzden çalışıp çalışmadığı hakkında yorum yapamam.