දැනටමත් ආරම්භ කර ඇති ක්‍රියාවලියක් මට නොහප් / තිරගත කළ හැකිද?


263

මම SSH හරහා දිගුකාලීන දත්ත සංක්‍රමණ ස්ක්‍රිප්ට් කිහිපයක් පරීක්ෂා කරමි. මම කියමු මම සවස 4 ට පමණ පිටපතක් ධාවනය කිරීමට පටන් ගනිමි; දැන්, සවස 6 ට පෙරළී ඇති අතර, මේ සියල්ල නොකිරීම ගැන මම මට ශාප කරමි screen.

nohupක්‍රියාවලියක් “ප්‍රතික්‍රියාශීලීව” කිරීමට ක්‍රමයක් තිබේද , නැතිනම් මුළු රාත්‍රිය පුරාම මගේ පරිගණකය මාර්ගගතව තැබිය යුතුද? මා දැනටමත් ආරම්භ කර ඇති ක්‍රියාවලියකට සම්බන්ධ screenවීමට නොහැකි නම් nohup, එසේ වන්නේ ඇයි? දෙමව්පියන් / දරුවාගේ ක්‍රියා පටිපාටිය අන්තර්ක්‍රියා කරන ආකාරය සමඟ යමක් කළ යුතුද? (අවම වශයෙන් 'ඇයි' යන ප්‍රශ්නයටවත් පිළිතුරු නොදෙන "නැත" පිළිතුර මම පිළිගන්නේ නැත - සමාවෙන්න;))


5
ගැන රසවත් බ්ලොග් සටහනක් දුටුවා පමණි disown. blogs.oracle.com/ksplice/entry/disown_zombie_children_and_the
ojrac

Answers:


212

ඔබ Bash භාවිතා කරන්නේ නම්, ඔබට ධාවනය කළ හැකිය disown -h job

ප්‍රතික්ෂේප කරන්න

disown [-ar] [-h] [jobspec ...]

විකල්ප නොමැතිව, එක් එක් රැකියා ස්ථානය සක්‍රිය රැකියා වගුවෙන් ඉවත් කරනු ලැබේ. -hවිකල්පය ලබා දී ඇත්නම් , කාර්යය මේසයෙන් ඉවත් නොකෙරේ, නමුත් සලකුණු කර ඇති අතර එමඟින් ෂෙල් එකට SIGHUP ලැබෙන්නේ නම් SIGHUP රැකියාවට නොයවනු ඇත. Jobspec සහභාගී නො වන අතර, වත් නම් -aහෝ -rවිකල්පය සපයා ඇත, වත්මන් රැකියා භාවිතා කරයි. රැකියා ස්ථානයක් සපයා නොමැති නම්, -a විකල්පය යනු සියලු රැකියා ඉවත් කිරීම හෝ සලකුණු කිරීම ය; -rජොබ්ස්පෙක් තර්කයක් නොමැතිව ඇති විකල්පය ක්‍රියාත්මක වන රැකියා සඳහා සීමා කරයි.


නියමයි; මම හිතුවේ මේ වගේ දෙයක් වෙයි කියලා.
ojrac

7
ජීවිතය අසාධාරණ විය හැකිය. gharper සහ මම මෙය එකම වේලාවක පළ කරමින් සිටියෙමු :)
මාටින් එම්.

4
ඔබ මගේ වීරයා
තෝමස් ඩිග්නන්

9
බැහැර කිරීම බැෂ් සඳහා විශේෂිත නොවේ. එය ද zsh, ksh93, ...
Phil P

2
ඔබ සැබවින්ම භාවිතා කළ disown %1යුත්තේ 1 රැකියා ස්ථානය නම්, fg හෝ bg මෙන් නොව ඔබ bg 1 සර්වර් වොච්.කොම්
ටියුටෝරියල්ස් /

82

Reptyr භාවිතා කරන්න

README වෙතින්:

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

එහි කතුවරයාගේ බ්ලොග් සටහන් කිහිපයක්:


මම ගොඩනංවන ලද මෙවලම් සමඟ (එනම් ප්‍රතික්ෂේප කිරීම) රැඳී සිටිමි, නමුත් එය උරගයා තරම් නම්‍යශීලී නොවේ. +1
ojrac

22

එක් ටීටී එකක සිට ඔබගේ වර්තමාන ටීටී දක්වා ක්‍රියාවලියක් සොරකම් කිරීමට, ඔබට මෙම කඩුල්ල උත්සාහ කිරීමට අවශ්‍ය විය හැකිය:

http://www.ucc.asn.au/~dagobah/things/grab.c

වත්මන් ලිනක්ස් / ග්ලිබ්ක් අනුවාදයන් සම්පාදනය කිරීම සඳහා එය නැවත ආකෘතිකරණය කිරීම අවශ්‍ය වේ, නමුත් තවමත් ක්‍රියාත්මක වේ.


1
සුවිශේෂී සිසිල්.
ojrac

17

ක්‍රියාවලියක් ආරම්භ වූ විට, STDIN, STDOUT සහ STDERR යම් දෙයකට සම්බන්ධ වේ . සාමාන්‍යයෙන් ඔබට එය වෙනස් කළ නොහැක. ඔබ විස්තර කරන අවස්ථාවෙහිදී, එය බොහෝ විට ssh සැසිය සමඟ සම්බන්ධ වී ඇත. nohup සෑහෙන්න හොඳයි ...

command < /dev/null > nohup.out 2>&1

එනම්, STDIN / dev / null ලෙසත්, STDOUT ගොනුවකටත් STDERR STDOUT ලෙසත් සකසයි. තිරය ​​තමාටම යොමු වන ටයිටිස් සැකසීම හා සම්බන්ධ වඩාත් නවීන දේ කරයි.

ක්‍රියාත්මක වන ක්‍රියාවලියක් නැවත ක්‍රියාත්මක කිරීමට හෝ තිරගත කිරීමට කිසිදු ක්‍රමයක් මම නොදනිමි. ඔබ / proc / $ pid / fd වෙත cd කර 0, 1 සහ 2 වෙත යොමු වන්නේ කුමක්දැයි බලන්න.

ප්‍රතික්ෂේප කිරීම සමඟ ඔබට යම් වාසනාවක් තිබිය හැකිය, නමුත් ක්‍රියාවලිය STDIN, STDOUT හෝ STDERR සමඟ කිසිවක් කිරීමට උත්සාහ කරන්නේ නම් නොවේ.


2
හොඳ අදහස් සඳහා +1. st (din | out | err) යනු ගැටලුවේ අනෙක් භාගය වන අතර, ඊළඟ වතාවේ මම මෙම තදබදයේ සිටින විට බැලීම ආරම්භ කළ යුතු ස්ථානය පිළිබඳ උපදෙස් මම අගය කරමි.
ojrac

6
ඔබට බොහෝ යුනික්ස් වල එය වෙනස් කළ හැකිය. එය පිළිකුල් සහගත කඩුල්ලකි. මම එයට කැමතියි. :) ඔබ කරන්නේ, ptrace වැනි දෝශ නිරාකරණ ආධාරයෙන් ක්‍රියාවලියට සම්බන්ධ වී, පසුව 0,1,2 වෙනත් ගොනු හසුරුවකට නැවත සම්බන්ධ කිරීමට dup2 () අමතන්න ක්‍රියාවලියට බල කරන්න.
සැන් ලින්ක්ස්

2
ඔව්, ඔබට එය වෙනස් කළ හැකිය. ක්‍රියාවලිය විරාමය (SIGSTOP) හා fd 0, 1, 2 සඳහා ගොනු විස්තර වෙනස් කිරීම සම්බන්ධ වේ. ඉන්පසු නැවත ආරම්භ කිරීම (SIGCONT).
මයිකල් මාටිනස්

13

තිරයේ කොටස සඳහා මට ඔබට සරල "නැත" පමණක් ලබා දිය හැකිය, ඔබ මා හේතුව ගැන උනන්දු වනු ඇත.

කෙසේ වෙතත් ඔබ උත්සාහ කර තිබේද disown(බාෂ් බිල්ඩින්)

~ $ 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.

13

ක්‍රයොපිඩ් යනු ග්‍රාෆ්.කේ හි කර්තෘගේ තවත් වර්ධනයකි, එය ක්‍රියාවලියක් ගොනුවකට කැටි කරයි, එවිට ඔබ ක්‍රියාවලිය නැවත ආරම්භ කිරීම සඳහා (තිරය ඇතුළත) ධාවනය කරයි.


1
හොඳයි! ක්‍රියාවලි සංක්‍රමණය පිළිබඳ මගේ ස්වාමියාගේ නිබන්ධනයේ දී මම ක්‍රියෝපයිඩ් භාවිතා කිරීමට උත්සාහ කළෙමි, නමුත් මා කුමක් කළත් එය සෑම විටම ක්‍රියාත්මක කිරීමට අසමත් විය. අවසානයේදී, මට ලිනක්ස් හි පැරණි අනුවාදයක් සමඟ ඩයිනෙක්ප්ට් භාවිතා කිරීමට සිදුවිය. ඔබ සමහර විට ක්‍රියෝපයිඩ් වර්ධනයට සම්බන්ධ වී තිබේද? ඔබේ නම කතෘගේ වසමට සමාන බව මට පෙනේ.
ජූලියානෝ

1
මම සංවර්ධනයට සම්බන්ධ නැත, මම කතුවරයා විශ්ව විද්‍යාලයෙන් දනිමි. ඔහුට මේ මොහොතේ ක්‍රයොපයිඩ් නඩත්තු කිරීමට වෙලාවක් නැත, එබැවින් සමහර අය shareource.org/project/cryopid
TRS-80


5

මම මෑතකදී නෙක්ස් වලට සබැඳියක් දුටුවෙමි දුටුවෙමි, එය වර්ණ ඇස්කි-කලා පුස්තකාලයක් වන ලිබ්කාකා භාවිතයෙන් සාදන ලද තිරයට සමාන උපයෝගීතාවයකි. වෙනත් විශේෂාංග අතර, පවත්නා ක්‍රියාවලියක් අල්ලා ගැනීමට සහ ඔබේ ගෙල (තිර) සැසිය තුළ එය නැවත දෙමාපිය කිරීමට හැකියාව ඇත.

කෙසේ වෙතත් මම එය භාවිතා කර නැත, එබැවින් එය ක්‍රියාත්මක වේද නැද්ද යන්න පිළිබඳව මට අදහස් දැක්විය නොහැක.


2

මම බොහෝ විට මෙය නොසිතන බැවින් මාව නිවැරදි කිරීමට නිදහස්ව සිටින්න (මම දැනටමත් ප්‍රතික්ෂේප කිරීම ගැන ඉගෙන ගෙන ඇත්තෙමි!) ... අවම වශයෙන් පසුබිම තුළ ක්‍රියාවලිය ක්‍රියාත්මක කිරීමට ctrl-Z සහ "bg" ක්‍රියා නොකරන්නේද? නැතහොත් STDOUT ක්‍රියාත්මක වන විට ඔබට එය දැකීමට අවශ්‍ය ප්‍රධාන ගැටළුවද?


1
හිමිකරු මියයන විට එය තවමත් ක්‍රියාවලිය විනාශ කරනු ඇත, එබැවින් OP විසින් විධානය ක්‍රියාත්මක කිරීමට අදහස් කළ පෙට්ටියෙන් පිටව යා යුතුය, එය වළක්වා ගැනීමට ඔහුට අවශ්‍ය වන්නේ එයයි
මාටින් එම්.

හරි මම ඒක ගන්නම්. පැහැදිලි කිරීම සඳහා ස්තූතියි. එබැවින් ප්‍රතික්ෂේප කිරීම -එච් යෝජනා මට වඩා හොඳ පෙනුමක් ඇති බව පෙනේ :-)
ක්‍රිස්_කේ

1
ඔබට එය ප්‍රතික්ෂේප කළ පසු ඔබට තවමත් මෙය කළ හැකිය -h: stackoverflow.com/a/625436/705198
ඇන්ඩ rew පීකේ

2

ක්‍රියාවලිය සමඟ අන්තර් ක්‍රියා කිරීමට නොහැකි වීම සහ අහඹු කර්නල් මොඩියුල පැටවීමට ඔබ විරුද්ධ නොවන්නේ නම්, ඔබට ස්නූප් දෙස බැලීමට වඩා නරක දෙයක් කළ හැකිය . විකල්පයක් ලෙස, තවත් ව්යාපෘති කිහිපයක් තිබේ. මෙන්න එක් ඇමතුම් ඉන්කෝඩ් එකක්, ඔබට බොහෝ විට ඔබට කිරීමට අවශ්‍ය දේ කළ හැකිය.


2

ඔබට ක්‍රියාවලි ප්‍රතිදානය gdb සමඟ ගොනු කිරීමට යොමු කළ හැකිය

https://blog-en.openalfa.com/how-to-detach-from-the-terminal-a-running-process-in-linux

ඉන්පසු එය ප්‍රතික්ෂේප කරන්න

යාවත්කාලීන කිරීම: මට උබුන්ටු 18.04 හි සුඩෝ සහ තරමක් වෙනස් gdb විධානය සමඟ gdb ධාවනය කිරීමට සිදු විය:

p (int)dup2(open("/tmp/test.stdout", 1), 1)


1
GDB හි විශාල භාවිතය, ස්තූතියි!
ojrac

1

විධාන රේඛා බ්‍රව්සරය nohupආරම්භ කිරීමට (හෝ ඒ හා සමාන) භාවිතා කිරීමට මට අවශ්‍ය වූයේ linksසංකීර්ණ සත්‍යාපන ක්‍රියාවලියක් සහිත ASP.NET වෙබ් අඩවියෙන් ගොනුවක් බාගත කිරීමෙන් පසුව හා එය සම්බන්ධ කිරීමටය. සමඟ curl/ wget.

මම අන්තිමේදී tmuxරැකියාව සාර්ථකව විසඳූ දේ භාවිතා කළෙමි .

  1. දුවන්න tmux
  2. ඔබගේ යෙදුම ධාවනය කරන්න ( linksමගේ නඩුවේදී) එය ක්‍රියාත්මක වීමට ඉඩ හරින්න
  3. SSH සැසිය වසන්න, යෙදුම දිගටම ක්‍රියාත්මක වේ
  4. පසුව එකම යන්ත්‍රයට SSH සමඟ සම්බන්ධ වී tmux attachයෙදුම නැවත තිරයට ගෙන ඒමට ධාවනය කරන්න

tmux විශිෂ්ටයි - නමුත්, nohup හෝ screen වැනි, එය ක්‍රියාත්මක වන්නේ ඔබේ ක්‍රියාවලිය ආරම්භ කිරීමට පෙර ඔබ එය භාවිතා කරන්නේ නම් පමණි. මෙම ප්‍රශ්නය ඔබගේ ක්‍රියාවලිය දැනටමත් ක්‍රියාත්මක වීමෙන් පසු ඔබට tmux අවශ්‍ය බව ඔබ වටහා ගත් වේලාවන් පිළිබඳව වේ.
ojrac

-1

සැසි කාලය අවසන් වීම ගැන ඔබ කනස්සල්ලට පත්ව සිටිනවාද? එවැනි අවස්ථාවකදී ඔබට Ctrl-z හා bg ක්‍රියාවලිය කළ හැකි අතර, පසුව සැසිය "පිං-ටී ප්‍රාදේශීය හොස්ට්" හෝ "ඉහළ" වැනි සජීවීව තබා ගැනීමට යම් දෙයක් තබන්න.

ඔබට ලොග්අවුට් කිරීමට අවශ්‍ය නම්, අනෙක් අදහස් වලට එකතු කළ නොහැකි යැයි මම බිය වෙමි.


එය ඉවත් වීමේ කාරණයයි.
ojrac

1
එය විසන්ධි කිරීම නැවැත්වීමට තවත් ක්‍රමයක් වන්නේ ඉහළට ධාවනය කිරීමයි. එය සෑම විටම බයිට් කිහිපයක් වටා ගමන් කරයි.
රොරි
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.