Soru Halihazırda başlatılmış bir işlemi nohup / ekranlayabilir miyim?


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çinnohup 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;)


247
2018-06-11 22:53


Menşei


Sadece hakkında ilginç bir blog yazısı gördüm disown. blogs.oracle.com/ksplice/entry/disown_zombie_children_and_the - ojrac


Cevaplar:


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.


200
2018-06-11 23:03



müthiş; Böyle bir şeyin ortaya çıkacağını umuyordum. - ojrac
Hayat adaletsiz olabilir. gharper ve ben bunu aynı anda gönderiyorduk :) - serverhorror
Kahramanımsın - Thomas Dignan
disown bash'a özgü değildir. Aynı zamanda zsh, ksh93'te ... - Phil P
Aslında kullanmak zorunda olduğunu buldum disown %1 Eğer 1, eğer kullanacağınız fg veya bg’den farklı olarak, jobspec ise bg 1  serverwatch.com/tutorials/article.php/3935306/... - mltsy


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ı:


77
2018-05-22 21:27



Yerleşik araçlarla (yani disown) sabitleneceğim, ama bu, reptyr kadar esnek değil. +1 - ojrac


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.


22
2018-06-12 05:38



Son derece havalı. - ojrac


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.


16
2018-06-11 23:04



İyi yorumlar için +1. st (din | out | err) problemin diğer yarısıdır ve bir dahaki sefere bu reçelde, bakmaya nereden başlayacağınıza dair tavsiyeyi takdir ediyorum. - ojrac
Aslında çoğu Unix'te değiştirebilirsiniz. Bu iğrenç bir hack. Onu seviyorum. :) Ne yaparsınız, ptrace gibi hata ayıklama desteğini kullanarak sürece bağlanın, daha sonra başka bir dosya el kitabına 0,1,2 yeniden bağlanmak için işlemi dup2 () çağırmaya zorlayın. - Zan Lynx
Evet, onu değiştirebilirsin. İşlemi duraklatmayı (SIGSTOP) ve dosya tanımlayıcılarını fd 0, 1, 2 için değiştirmeyi içerir. Sonra yeniden başlatılır (SIGCONT). - Michael Martinez


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.


12
2018-06-14 18:26



Güzel! Ustağımın süreç göçü konusundaki tezinde kriyopiyi kullanmaya çalıştım ama ne yaptığımın bir önemi yok. Sonunda, Linux'un eski bir sürümü ile dynckpt kullanmak zorunda kaldım. Belki de kriyopid gelişiminde rol oynadın mı? Adının yazarın alanına benzediğini görüyorum. - Juliano
Gelişime dahil değilim, sadece üniversiteden bir yazar biliyorum. Şu anda kriyopiyi sürdürmek için zamanı yok, bu yüzden bazı insanlar üzerinde çalışmaya başladıkları gibi görünüyor. sharesource.org/project/cryopid - TRS-80


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.

11
2018-06-11 23:02





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ı.


9
2018-06-13 00:59





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.


5
2018-06-14 21:03