ධාවන ක්‍රියාවලිය ප්‍රතික්ෂේප කර එය නව තිර කවචයකට සම්බන්ධ කරන්නේ කෙසේද?


166

මට SSH කවචයක ධාවන වැඩසටහනක් තිබේ. මට එය විරාමයක් තබා නැවත පැමිණෙන විට එය ක්‍රියාත්මක කිරීම අත්හිටුවීමට අවශ්‍යය.

එය කිරීමට මා සිතූ එක් ක්‍රමයක් නම් එහි හිමිකාරිත්වය තිර කවචයකට මාරු කිරීම ය.

ඉදිරියට යාමට වෙනත් ක්‍රමයක් තිබේද?



Unix.stackexchange.com/a/4039/13496 වැනි ප්‍රශ්න වලින් මට අසන්නට ලැබෙන්නේ රෙට්ටි සහ නෙක්ස් ගැන ය . හ්ම් ... ඊළඟ වතාවේ ක්‍රියාවලියක් ක්‍රියාත්මක කිරීමට පෙර “මෙහි තිරය ” වැනි ස්තරයක් තිබේදැයි කල්පනා කර බලන්න, අනාගතයේ දී මට ඉහළ පර්යන්තය අහිමි වුවහොත්, එය නැවත ස්ටෑඩින් / අවුට් / වැරදීමකින් පහසුවෙන් ගසාගෙන යනු ඇත
මාකෝස්

මට තේරුම් ගත නොහැකි මෙම ප්‍රශ්නයේ ද්විතියික / ව්‍යංග ගැටලුව නම් ... ස්ටෙඩින් සඳහා අවශ්‍ය / බලා නොසිටින පසුබිමක අළුත් / නිකම්ම දියත් කළ එකක් ඇති විට අත්හිටවූ රැකියාවක් ප්‍රතික්ෂේප කිරීමට ෂෙල් තෝරාගත්තේ ඇයි? මෙය මා පුරුදු වී ඇති ප්‍රතිකාරයයි, එබැවින් මෙහි වෙනස් වූයේ කුමක් දැයි නොදනී ...
මාකෝස්

Answers:


89

GNU භාවිතා screenකිරීම ඔබේ හොඳම ඔට්ටුවයි.

විට ඔබට පළමු පිවිසුම් ධාවනය ආරම්භක තිරයෙහි - මම ක්රියාත්මක screen -D -R, ඔබේ විධානය ක්රියාත්මක කරන්න, එක්කෝ විසන්ධි හෝ එය අත්හිටුවීමට CTRL-Zඑවකට විසන්ධි තිරය එබීමෙන් හා CTRL-Aපසුව D.

ඔබ නැවත යන්ත්‍රයට පිවිසෙන විට, ධාවනය කිරීමෙන් නැවත සම්බන්ධ වන්න screen -D -R. ඔබ පෙර මෙන් එකම කවචයේ සිටිනු ඇත. ඔබ jobsඑසේ කළේ නම් අත්හිටවූ ක්‍රියාවලිය බැලීමට ඔබට ධාවනය කළ හැකි අතර, %1එය නැවත පෙරදැරි කිරීමට (හෝ අදාළ රැකියාව #) ධාවනය කරන්න.


32
මම හිතන්නේ මේක ප්‍රශ්නයට උත්තර දෙන්නේ නැහැ. ප්‍රශ්නය ආරම්භ වන්නේ " මට වැඩසටහනක් ක්‍රියාත්මක වේ " යනුවෙනි. මෙම පිළිතුර උපකල්පනය කරන්නේ එය තවම ක්‍රියාත්මක නොවන බවයි…
ඇන්කෝ

1
ඔව් ඔහු පැහැදිලිවම ලියා ඇත්තේ ඔහුට එය තිර සැසියකට ඇතුළත් කිරීමට අවශ්‍ය බවයි :-)
ෆ්ලෝරියන් හේගල්

118

disownබිල්ට් සමඟ ඔබට වැඩසටහනේ “හිමිකාරිත්වය” කවචයෙන් අවලංගු කළ හැකිය :

# press Ctrl+Z to suspend the program
bg
disown

කෙසේ වෙතත් මෙය ෂෙල් එකට පවසන්නේ ෂෙල් SIGHUPඑක පිටවන විට වැඩසටහනට සං signal ාවක් නොයවන ලෙසයි. සාමාන්‍යයෙන් සම්මත ආදානය, ප්‍රතිදානය සහ දෝෂ ප්‍රවාහ ලෙස ටර්මිනලය සමඟ ඇති ඕනෑම සම්බන්ධතාවයක් මෙම වැඩසටහන විසින් රඳවා ගනු ඇත. ඒවා වෙනත් පර්යන්තයකට නැවත සම්බන්ධ කිරීමට ක්‍රමයක් නොමැත. ( සෑම කවුළුවක් සඳහාම ටර්මිනලයක් අනුකරණය කිරීමෙන් තිරය ක්‍රියා කරයි, එබැවින් වැඩසටහන් තිර කවුළුවට අමුණා ඇත.)


එය ඩිබගර් (එනම් භාවිතා වැඩසටහන අනුයුක්ත කිරිම මඟින් වෙනස් ගොනු කිරීමට filedescriptors ඇගිල්ල හැකි ය ptrace) සහ එය අමතන්න කරමින් open, dupහා close. මෙය කරන මෙවලම් කිහිපයක් තිබේ; මෙය උපක්‍රමශීලී ක්‍රියාවලියක් වන අතර සමහර විට ඔවුන් ඒ වෙනුවට ක්‍රියාවලිය බිඳ වැටෙනු ඇත. හැකියාවන් අතරට (පිළිතුරු වලින් එකතු කරන ලද සබැඳි , ධාවනය වන ක්‍රියාවලියක් ප්‍රතික්ෂේප කර එය නව තිර කවචයකට සම්බන්ධ කරන්නේ කෙසේද? සහ දැනටමත් ආරම්භ කර ඇති ක්‍රියාවලියක් මට නොහප් / තිරගත කළ හැකිද? ):


disownරැකියා පාලන ලැයිස්තුවෙන් ක්‍රියාවලිය ඉවත් කරයි.
ctrl-alt-delor

4
ඇයි නැත්තේ disown -h?
සීස් ටිමර්මන්

Ees සීස් ටයිමර්මන් එය රැකියාව ෂෙල් එකේ රැකියා වගුවේ තබයි, නමුත් එහි ඇති වාසිය කුමක්ද?
ගිලෙස්ගේ SO- නපුරු වීම නවත්වන්න '

Il ගිලස්: එබැවින් ඔබට තවමත් fgහෝ killඑය කළ හැකි අතර එය තනිවම අවසන් වේදැයි බලන්න.
පීටර් කෝර්ඩ්ස්

ක්‍රියාවලි සමූහයක් සමඟ (උදා bzcat a.bz2 | grep text) වැඩ කරන සඳහන් කළ උපයෝගිතා මොනවාද? මෑන් ෆෝ reptyrපවසන්නේ එය ළමයින් සමඟ ක්‍රියාවලි ගෙනයාමට සහාය නොදක්වන බවයි.
dma_k

68

පර්යන්ත අතර ක්‍රියාවලියක් ගෙනයාමට හෝ ප්‍රතික්ෂේප කළ අයෙකු නැවත සම්බන්ධ කිරීමට, ඔබට උදා: reptyr භාවිතා කළ හැකිය .


1
ඔව්, එය සුරකින ලදි, ස්තූතියි! කතෘගේ වෙබ් අඩවිය සමාන හෝ පැරණි මෙවලම් වලට වඩා හොඳින් ක්‍රියා කරන ආකාරය මම කියෙව්වා. ncurses වැඩසටහන් සඳහා.
මාකෝස්

4
මේක නම් නියමයි; එය නිරන්තරයෙන් ssh වලින් ධාවනය කර දුම්රියට නැගීමට අවශ්‍ය වීමෙන් මිතුරෙකුගේ අවාසනාවන්ත තත්වය නිරාකරණය කළ යුතුය. "අපොයි, තිරය භාවිතා කිරීමට අමතක වී ඇත. නැවතත්."
ඇඩම් කැට්ස්

3
+1 පිළිගත් screenපිළිතුර ඇත්ත වශයෙන්ම පරිපූර්ණ වුවත්, එය ඇත්ත වශයෙන්ම ප්‍රශ්නයට පිළිතුරු සපයන්නේ නැත, එය දැනට ක්‍රියාත්මක වන ක්‍රියාවලියක් හෝ ඒ හා සමාන වෙනත් ආකාරයකට ගෙනයාමට ක්‍රමයක් ඉල්ලා සිටී screen. මෙම පිළිතුරද බලන්න: serverfault.com/a/284795
toxefa

2
නිරපේක්ෂ සජීවී සේවකයෙක්. පරිශීලක තහවුරු කිරීමක් බලාපොරොත්තුවෙන් වාඩි වී සිටින apt dist-upgra ධාවනය සඳහා නැවත ඇමිණීමට මට ඉඩ ලබා දුන්නේය.
andig

28

මගේ ප්‍රියතම විසඳුම භාවිතා කිරීම tmux, ඔබට සැසිය වෙන් කර වෙනත් පර්යන්තයක නැවත ඇමිණිය හැකිය.

ඔබ පෙර සැසිවාරයෙන් වෙන් වූ විට, ඔබට ආරක්ෂිතව පර්යන්තය වසා දැමිය හැකිය; tmux attachඔබ ඉවත් වී සිටියද පසුව සැසිය වෙත ආපසු යාමට භාවිතා කරන්න.


1
ඔබට ඔබේ සැසිය ඔබේ මිතුරා සමඟ බෙදා ගත හැකි අතර බහු කවුළු සහ කවුළු භාවිතා කළ හැකිය. love it ^ _ ^
igor

කරුණාකර භාවිතා කිරීමේ උදාහරණය?
Vitaly Zdanevich

21

ධාවනය වන වැඩසටහන් වෙනත් පර්යන්තයකට නැවත සම්බන්ධ කිරීමට ඔබට ඉඩ සලසන රෙට්ටි නම් කුඩා උපයෝගීතාවයක් ද ඇත .


19

මම එය නිතිපතා භාවිතා නොකරමි , නමුත් නියෙක්ස් මේ සඳහා සහාය දෙන බව කියා සිටී. එය screenවඩා හොඳ කවුළු කළමනාකරණය වැනි විවිධ විසිතුරු අංගයන්ගෙන් යුත් සමාන වැඩසටහනකි, නමුත් එය ඉදිරිපත් කරන ප්‍රධානතම දෙය නම් ක්‍රියාවලියක් කවුළුවකට ආනයනය කිරීමේ හැකියාවයි


2
සිත්ගන්නා සුළුය. එය අපිරිසිදු ( ptrace) වාදනය කරයි , නමුත් එය ගොනු විස්තර කරන්නන් හසුරුවන්නේ නැත, එය ක්‍රියාවලිය අත්හරියි. එය අල්ලා ගත හැකි find /නමුත් අන්තර්ක්‍රියාකාරී කඩාවැටීමක් බිඳ වැටුණි.
ගිලෙස්ගේ SO- නපුරු වීම නවත්වන්න '

Il ගිලස් මා උත්සාහ කළ විට එය ගිය ආකාරය මට මතක නැත, නමුත් එයට විශාල කීර්තියක් නැත, එය නිතිපතා අසමත් වන බව මට කියනු ලැබේ
මයිකල් මොරොසෙක්

9

ඔබට එය විරාමයක් තබා පසුව නැවත ආරම්භ කිරීමට අවශ්‍ය නම්, ඔබට භාවිතා killකිරීමට STOPහෝ CONTසං .ා කිරීමට හැකිය.

මුලින් PID සමඟ ඇති ක්‍රියාදාමයන් සොයා ගන්න

$ ps aux

ඉන්පසු ක්‍රියාවලියට ලැයිස්තුගත කර ඇති PID වෙත සං als ා යවන්න

$ kill -STOP <PID>

$ kill -CONT <PID>

9

තෝමස් හෙබෙට්ස් වෙතින් "ඉන්කෝඩ්" මට අවශ්‍ය දේමයි:

https://github.com/ThomasHabets/injcode

ඉන්කෝඩ් වැඩසටහන මඟින් ඔබ කලින් දැන සිටියත් නැතත්, ක්‍රියාත්මක වන තිරයකට හෝ ටී.එම්.එස්.

README වෙතින්:

උදාහරණ 1: ඉර්සි එක් පර්යන්තයක සිට තවත් පර්යන්තයකට ගෙන යන්න

සමහර විට එය තිරයකට ගෙනයන්න.

පළමුව එක් පර්යන්තයකින් ඉර්සි ආරම්භ කරන්න.

වෙනත් පර්යන්තයක ඉන්කෝඩ් ධාවනය කරන්න: $ injcode -m retty

නව පාලන පර්යන්තයක් ඇතුළුව ඉර්සි දැන් දෙවන පර්යන්තයට ගෙන යා යුතුය.


1

මෙය මට ප්‍රයෝජනවත් විය:

  1. bg ක්රියාවලිය
  2. jobs -l ක්‍රියාවලි අංකය සොයා ගන්න
  3. tmux ෂෙල් කවුළු කළමනාකරු ආරම්භ කරන්න
  4. reptyr -L PROCESSNUMBER

reptyrගේ -Lවැඩ කටයුතු කිරීමට මෙම ලබා ගැනීමට අවශ්ය විය:

-L Like '-l', but also redirect the child's stdio to the slave.

මෙම දෝෂය නිසා:

$ reptyr 30622

[-] Unable to open the tty in the child.
Unable to attach to pid 30622: Permission denied

සහ -L සමඟ

$ reptyr -L 30622
Opened a new pty: /dev/pts/4
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.