අත්හිටුවන්නේ කෙසේද සහ පසුබිම් ක්‍රියාවලියක් පෙරට ගෙන එන්නේ කෙසේද


186

මට මුලින් ක්‍රියාත්මක වන ක්‍රියාවලියක් තිබේ. මම Ctrl+ මගින් අත්හිටුවා Z, පසුව පසුබිම තුළ එහි ධාවනය නැවත ආරම්භ කරමි bg <jobid>.

පසුබිම තුළ ක්‍රියාත්මක වන ක්‍රියාවලියක් අත්හිටුවන්නේ කෙසේදැයි මම කල්පනා කරමි.

පසුබිම් ක්‍රියාවලියක් පෙරට ගෙන එන්නේ කෙසේද?

සංස්කරණය කරන්න:

ක්‍රියාවලිය stderr වෙත ප්‍රතිදානය කරයි, එබැවින් fg <jobid>ක්‍රියාවලිය පර්යන්තයට ප්‍රතිදානය කරන අතරතුර මම විධානය නිකුත් කරන්නේ කෙසේද?


2
ඔබට තවමත් විධාන යතුරු පුවරුවක විධාන ටයිප් කළ හැකිය. STDERR හි දක්වා ඇති පෙළ ආදානය ලෙස ගණන් නොගනී, ඔබ යවන යතුරු පමණි. එය තිරය මත ව්‍යාකූල බවක් පෙනුනද එය ක්‍රියාත්මක වේ.
කාලෙබ්

Ale කාලෙබ්: ක්‍රියාවලිය stdout වෙත ප්‍රතිදානය කළත්, fg <jobid>එය පෙරබිමක් බවට පත් කිරීමට මට තවමත් ටයිප් කළ හැකිද?
ටිම්

Im තිම්: ඔව්, ඔබට පුළුවන්.
කාලෙබ්

Answers:


239

ටිම් පැවසූ පරිදි, fgඅවසාන ක්‍රියාවලිය නැවත පෙරට ගෙන ඒමට ටයිප් කරන්න.

ඔබට පසුබිම් ක්‍රියාවලියක් එකකට වඩා තිබේ නම්, මෙය කරන්න:

$ jobs
[1]   Stopped                 vim
[2]-  Stopped                 bash
[3]+  Stopped                 vim 23

fg %3vim 23ක්‍රියාවලිය නැවත පෙරට ගෙන ඒමට .

පසුබිම තුළ ක්‍රියාත්මක වන ක්‍රියාවලිය අත්හිටුවීමට, භාවිතා කරන්න:

kill -STOP %job_id

SIGSTOP සං signal ාව ක්‍රියාවලියක් නැවැත්වීම (විරාමය) අත්‍යවශ්‍යයෙන්ම එකම ආකාරයකින් Ctrl+ Zකරයි.

උදාහරණයක් ලෙස: kill -STOP %3.

ආරංචි මාර්ග: ලිනක්ස් සහ යුනික්ස් ක්රියාවලියන් සංඥා යැවීම සඳහා කෙසේද හා පසුබිම හා පෙරට ආ රැකියා පාලනය කරන්නේ කෙසේද .


24
සං 19 ාව 19 SIGCONTමා සඳහා ය; මම භාවිතා kill -STOPහා kill -CONTකෙසේ හෝ සංඛ්යා සිහිපත් කිරීමට මනාප, නමුත් ඔබ පරීක්ෂා කළ හැක kill -lසංඛ්යාත්මක අගයන් ඔබ මතක්
පලක්

ක්‍රියාවලිය stderr වෙත ප්‍රතිදානය කරයි, එබැවින් මම විධානය නිකුත් කරන්නේ කෙසේද jobසහ fg <jobid>ක්‍රියාවලිය පර්යන්තයට ප්‍රතිදානය කරන අතරතුරද?
ටිම්

1
Im ටයිම් ඔබ සාමාන්‍යයෙන් මෙන් විධානය ටයිප් කරන්න. කාර්යය පසුබිම් වී ඇති තාක් කල්, එය ඔබ ටයිප් කරන දේ කියවන්නේ නැත - ඔබේ කවචය. ඔබ ටයිප් කරන දේ ඔබට කැඩී ඇති බවක් පෙනෙන්නට තිබුණත්, කවචය එය හොඳින් තේරුම් ගනීවි.

Lex ඇලෙක්ස්වෙබර්: ස්තූතියි, එය ක්‍රියාත්මක වේ! (1) පසුබිම් රැකියාවක් "Ctrl + Z" ඇතුළු කිසිදු ආදානයක් සහ ප්‍රතිදානයක් පිළිගන්නේ නැද්ද? (2) පසුබිම තුළ ක්‍රියාත්මක වන රැකියාවක් කෙලින්ම අත්හිටුවිය හැකිද? ඔව් නම්, කෙසේද? එසේ නොවේ නම්, එය අත්හිටුවීමට පෙර එය පෙරබිමෙහි ධාවනය කිරීම සඳහා පළමුව වෙනස් කළ යුතුද?
ටිම්

2
පසුබිම තුළ ධාවනය රැකියාවක් සෘජුවම තහනම් කළ හැකි : ඔව් kill -STOP %job_idපැහැදිලි කළ ආකාරයට,
වැඩක්

37

රැකියා පාලනයක් ඇති ඕනෑම කවචයක් සම්බන්ධයෙන් මෙය සත්‍යයක් විය යුතු අතර, එය සැබවින්ම පුරාණ කවචයක් සමඟ ගනුදෙනු නොකරන්නේ නම් (බොහෝ දුරට) ඔබට එය සුළුකොට තැකිය හැකිය. එය POSIX ප්‍රමිතියේ ඇත , එබැවින් dashරැකියා පාලනයට පවා සහය දක්වයි (අන්තර්ක්‍රියාකාරීව හෝ ක්‍රියාත්මක වන විට -m).

අන්තර්

  • Ctrl+ zදැනට පෙර සැකසූ වැඩසටහන අත්හිටුවනු ඇත
  • bgමෑතකදී අත්හිටවූ වැඩසටහන පසුබිම් කරනු ඇත
    ( bg %2ඔබට පරීක්ෂා කළ හැකි රැකියා අංකය සමඟ භාවිතා කරන්න jobs)
  • fg මෑතකදී අත්හිටුවන ලද වැඩසටහනට පෙරබිම් කරනු ඇත

තුළ zsh, fgවෙනත් Ctrl+ හරහා විමසුමේ සිට ව්‍යංගයෙන් ධාවනය කිරීමට ඔබට යතුරු බන්ධනයක් ලිවිය හැකිය z:

_zsh_cli_fg() { fg; }
zle -N _zsh_cli_fg
bindkey '^Z' _zsh_cli_fg

bgඅත්හිටුවීම මත ව්‍යංගයෙන් ක්‍රියාත්මක වීමට දක්ෂ ක්‍රමයක් ද ඇත , නමුත් එය අ wise ාන දෙයක් ලෙස පෙනේ; අවම වශයෙන් මට නම්, මගේ Ctrl+ zභාවිතයෙන් බහුතරය Ctrl+ cපුපුරා යාමට අපොහොසත් වන බැවිනි ; මම උදා සමග බව අනුගමනය කිරීමට ඔබට අවශ්ය kill %1වෙනුවට bg, හා ඝාතනය කිරීමට පැහර මම කැමති නැහැ! (මෙම තර්කය ද මම තව දුරටත් මෙම යතුර බන්ධන භාවිතා ඇයි ව්යාප්තව: මම ඇදහැලෙන කරනවා නම් Ctrl+ zඇති ක්රියාවලිය නතර කිරීමට, මම එය කිරීමට අවශ්ය අවසන් දේ නැවත ආරම්භ වේ!)

අන්තර්ක්‍රියාකාරී නොවන

ඔබ වෙනත් ෂෙල් අවස්ථාවක සිටී නම් (හෝ වෙනත් පරිශීලකයෙකු, සමහර විට sudoවිධාන ද ඇතුළුව ), ඔබට රැකියා අංක භාවිතා කිරීමට නොහැකි වනු ඇත.

එහි ක්‍රියාදාම හැඳුනුම්පත (PID) දැනගත් පසු ඔබට වෙනත් ක්‍රියාවලියක් මත ක්‍රියා කළ හැකිය. ඔබට PID සමඟ pgrep …හෝ ps aux |grep …(හෝ එකම කවචයකින් jobs -lහෝ $!) ලබා ගත හැකි අතර පසුව ඔබට ධාවනය කළ හැකිය:

kill -STOP $PID  # suspend
kill -CONT $PID  # continue (resume)

ඔබ ක්‍රියාවලි හැඳුනුම්පත නොදන්නේ නම් සහ ක්‍රියාවලියේ වෙනත් අවස්ථා නමින් අත්හිටුවීම ගැන කරදර නොවන්නේ නම්, ඔබට මෙයින් එකකට සං als ා යැවිය හැකිය:

killall -STOP program_name
pkill -STOP program_name
pkill -f -STOP program_name_or_args

CONTවැඩසටහන සංඥා සමග නතර Ctrl+ z(නොව bg'ඈ) ඔබට මෙන්, (පෙරබිම තුළ) එහි ප්රගතිය නැවත ආරම්භ එම වනු ඇත fgඑය.

Re: සම්මත දෝෂයකි

මෙම ප්‍රශ්නයට සංස්කරණය සම්මත දෝෂයක් ගැන අසයි:

ක්‍රියාවලිය stderr වෙත ප්‍රතිදානය කරයි, එබැවින් fg <jobid>ක්‍රියාවලිය පර්යන්තයට ප්‍රතිදානය කරන අතරතුර මම විධානය නිකුත් කරන්නේ කෙසේද?

ප්‍රශ්නයට ලක්වූ රැකියාව පසුබිම් කර ඇති සංරචක නොමැති නම් (හෝ මුළු කාර්යයම පසුබිම් කර ඇත, සමහර විට හරහා kill -CONT), ප්‍රතිදානය අත්හිටවූ විට ඔබ සැබවින්ම නොපෙනේ.

එය තවමත් දත්ත ප්‍රතිදානය කරන්නේ නම් (එය සම්මත ප්‍රතිදානය හෝ සම්මත දෝෂයක් වේවා), එය නිසැකවම ඔබේ පර්යන්තය දෘශ්‍යමය වශයෙන් අවුල් සහගත වනු ඇත, නමුත් එය ඔබගේ ආදානයේ කොටසක් නොවන බැවින් එම සියලු ප්‍රතිදානය නොසලකා හරිනු ඇත. මෙය ඔබ කිසිදු අක්ෂර වින්‍යාසයකට ඇතුළු වී නැති බව දැන ගැනීම දුෂ්කර වනු ඇත, නමුත් (අන්ධ ලෙස) ටයිප් කිරීම fgEnterප්‍රමාණවත් විය යුතුය (ඔබට බහුවිධ රැකියා තිබේ නම් සහ ප්‍රශ්නයට ලක්වූ තැනැත්තා නවතම නොවේ නම්, ඔබට ඇත්ත වශයෙන්ම රැකියා විස්තරය අවශ්‍ය වනු ඇත ).

ඔබට රැකියා විස්තරය සොයා ගැනීමට අවශ්‍ය නම්, වෙනත් STOPඅන්තර් පර්යන්තයක් භාවිතා කර ඉහත අන්තර්ක්‍රියාකාරී නොවන ක්‍රම හරහා සං signal ාව යැවීමට . මෙය ඔබගේ දර්ශනය නිදහස් කළ යුතුය (සමහර විට Enterකිහිප වතාවක් පහර දෙන්න හෝ ධාවනය කරන්න clearහෝ Ctrl+ L) එවිට ඔබට jobsරැකියා විස්තරය සොයා ගැනීමට දුව fg %Nගොස් Nඑම අංකය ඇති තැන ධාවනය කළ හැකිය.


ක්‍රියාවලි විරාම හා නැවත ආරම්භ කිරීමේ එකම ගැටළුව නම්, ඔබ වෙනත් වැඩසටහනකට කිසියම් සම්බන්ධතාවයක් සිදු කළේ නම් (උදාහරණයක් ලෙස RabbitMQ වැනි), ඔබ නැවත ආරම්භ කරන විට සම්බන්ධතාවය නැති වී යනු ඇත.
නව

Av නව් - එයට හේතුව ඔබ එය හිස රහිතව ධාවනය නොකිරීමයි. Bash හා zsh දී, මම ඔබ හුදෙක් කිරීමට අවශ්ය විශ්වාස වෙනුවෙන් කැප වූ backgrounded ක්රියාවලිය. එවැනි කාර්යයන් nohup සමඟ ක්‍රියාත්මක කිරීමට මම කැමැත්තෙමි හෝ තිරය හෝ tmux වැනි පර්යන්ත බහුකාර්යයක් . ඔබට නොහප් ක්‍රියාවලියක් තෝරා ගත නොහැක (ඔබට වෙනම සම්බන්ධතාවයකින් පසුබිම් ක්‍රියාවලියක් නැවත ආරම්භ කළ නොහැකි සේම), නමුත් ඔබට බහුකාර්යයකට සම්බන්ධ විය හැකිය.
ඇඩම් කැට්ස්

එය පසුබිම් ක්‍රියාවලියක් විය. මම ටර්මිනලය වසා දමා වෙනත් පර්යන්තයකින් සේවාදායකයට ප්‍රවේශ වී සිටිමි.
නව

ඔව්, එය මනසින් දියත් කළහොත් මිස ඔබට වෙනත් කවචයකින් ක්‍රියාවලිය නැවත ආරම්භ කළ නොහැක. ඒ සඳහා මම තිරය හෝ ටීඑම්එක්ස් නිර්දේශ කරමි.
ඇඩම් කැට්ස්

CONTCtrl + Z සමඟ නවතා ඇති ක්‍රියාවලියකට (රැකියාව / නල මාර්ගයට) ඔබ සං signal ාවක් එවන්නේ නම්, ඔබ එය නොකළද bgඑය පසුබිමේ නැවත ආරම්භ වනු ඇතැයි මම විශ්වාස කරමි .
ජී-මෑන් පවසන්නේ 'මොනිකා නැවත

11

fgඑය පෙරට ගෙන ඒමට ටයිප් කරන්න.


ස්තූතියි! ක්‍රියාවලිය stderr වෙත ප්‍රතිදානය කරයි, එබැවින් fg <jobid>ක්‍රියාවලිය පර්යන්තයට ප්‍රතිදානය කරන අතරතුර මම විධානය නිකුත් කරන්නේ කෙසේද?
ටිම්

1
  1. jobsවිධානය සමඟ රැකියා ලැයිස්තුගත කරන්න
  2. ඔබේ ඉලක්කගත කාර්යය පෙරට ගෙන එන්න fg; උදා: fg %4
  3. CTRL Zඅත්හිටුවීමට පහර දෙන්න
  4. එය පසුබිමේ ධාවනය කිරීම ආරම්භ කිරීමට, bg භාවිතා කරන්න; උදා:bg %4

0

ක්‍රියාවලියක් අවසන් කිරීම විවිධ ආකාරවලින් කළ හැකිය. බොහෝ විට, කොන්සෝලය මත පදනම් වූ විධානයකින්, යැවීම aCtrlc යතුරු roke ාතයක් (පෙරනිමි බාධාකාරී අක්‍ෂරය) විධානයෙන් ඉවත් වේ. ක්‍රියාවලිය පෙරබිම් ප්‍රකාරයේදී ක්‍රියාත්මක වන විට මෙය ක්‍රියාත්මක වේ.

ක්‍රියාවලියක් පසුබිම් ප්‍රකාරයේදී ක්‍රියාත්මක වන්නේ නම් පළමුව ඔබට එහි රැකියා හැඳුනුම්පත psවිධානය භාවිතා කර ලබා ගත යුතු අතර ඉන් පසුව පහත දැක්වෙන පරිදි ක්‍රියාවලිය kill ාතනය කිරීම සඳහා kill ාතන විධානය භාවිතා කළ හැකිය:

$ps -f
UID      PID  PPID C STIME    TTY   TIME CMD
amrood   6738 3662 0 10:23:03 pts/6 0:00 first_one
amrood   6739 3662 0 10:22:54 pts/6 0:00 second_one
amrood   3662 3657 0 08:10:53 pts/6 0:00 -ksh
amrood   6892 3662 4 10:51:50 pts/6 0:00 ps -f
$kill 6738
Terminated

මෙහිදී killවිධානය මඟින් first_oneක්‍රියාවලිය අවසන් වේ. ක්‍රියාවලියක් සාමාන්‍ය killවිධානයක් නොසලකා හරින්නේ නම් , ඔබට kill -9පහත පරිදි ක්‍රියාවලි හැඳුනුම්පත භාවිතා කළ හැකිය :

$kill -9 6738
Terminated

2
මෙය සත්‍යයක් වුවත්, එය ප්‍රශ්නයට පිළිතුරු සපයන්නේ නැත ...
jasonwryan
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.