මා බලා නොසිට විධානයක් ක්‍රියාත්මක කරන්න


149

සීඑල්අයි හි, සමහර විට මා ටයිප් කරන විධානයක් සම්පූර්ණ කිරීමට ටික කාලයක් ගත වන අතර සමහර විට එය සිදුවන්නේ කවදාදැයි මම දනිමි. ලිනක්ස් හි "පසුබිම" සහ එවැනි දේ ගැන මම ටිකක් ව්‍යාකූල වී සිටිමි.

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


3
මෙයද බලන්න ඔබ විධාන රේඛා යෙදුම් කෙලින්ම පසුබිමට යවන්නේ කෙසේද? ඔබ දැනටමත් විධානය ආරම්භ කර එය පසුබිමට යැවීමට අවශ්‍ය නම්.
ගිලෙස්ගේ SO- නපුරු වීම නවත්වන්න '

Answers:


159

විධානය ක්‍රියාත්මක කිරීමට පෙර &, පසුබිම තුළ ක්‍රියාත්මක වීමට ඔබට විධාන රේඛාවට එකතු කළ හැකිය :

long-running-command &

විධානයක් ආරම්භ කිරීමෙන් පසු, CtrlZඑය අත්හිටුවීමට ඔබට තද කළ හැකිය , පසුව bgඑය පසුබිමට දමන්න:

long-running-command
[Ctrl+Z]
bg

මම "find ~ / a.java &" විධානය භාවිතා කළ නමුත් මම පසුබිමට නොගියෙමි? එසේම, මම cmd + z (මැක් සඳහා) උත්සාහ කළෙමි .... එය ක්‍රියා නොකරයි
අභිමන්යූ ආර්යන්

2
Bi අභිමන්යුආරියන්, සමහර විට ඔබට find ...පළමුව ඔබේ විධානය නිදොස් කිරීමට අවශ්‍යය , පසුව එය පසුබිමේ ක්‍රියාත්මක කරන්න. මෙම අවස්ථාවේදී ඔබට -nameවිකල්පය මඟ හැරී ඇත.
ඇලෙක්සිස් විල්කේ

අද ගිනිකඳු පුපුරා යාමෙන් ඔබ හොඳින් සිටින බව මම විශ්වාස කරමි @ ග්‍රෙග් හෙව්ගිල්
කයිල් බ්‍රිඩන්ස්ටයින්

1
Y කයිල්බ්‍රයිඩන්ස්ටයින් ඔව් මෙහි කිසිදු ගැටළුවක් නැත, එය කිලෝමීටර් 800 ක් දුරින් විය. සටහනට ස්තූතියි.
ග්‍රෙග් හෙව්ගිල්

120

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

nohup command &

මෙය ක්‍රියාවලිය පසුබිමේ ධාවනය කරනවා පමණක් නොව, ලොගයක් ද ජනනය කරයි ( nohup.outවත්මන් නාමාවලියෙහි කැඳවනු ලැබේ, එය කළ නොහැකි නම්, ඔබේ නිවාස නාමාවලිය) සහ ඔබ වත්මන් කවචය වසා දැමුවහොත් / ඉවත් වුවහොත්, දරුවාගේ ප්‍රගතිය වළක්වා ගැනීමෙන් ක්‍රියාවලිය විනාශ නොවේ. මරා දැමූ විට මව් සං sign ා (එනම්, පිටතට යාම, දෙමව්පියන්ට SIGHUP මඟින් හෝ වත්මන් කවචය වසා දැමීම).

වෙනත් ඇමතුම් ඇති disownනමුත් එය වෙනත් පිළිතුරු වල දිගුවක් නොව ක්‍රමවේදයක්ම වේ:

command & # our program is in background
disown # now it detached itself of the shell, you can do whatever you want

මෙම විධානයන් මඟින් ක්‍රියාවලි ප්‍රතිදානයන් පහසුවෙන් ලබා ගැනීමට ඉඩ නොදේ.


5
'95 සිට සිසැඩ්මින්. අද වන තුරු ප්‍රතික්ෂේප කිරීම ගැන අසා නැත, ස්තූතියි! සෑම කවචයක් සමඟම එය ක්‍රියා නොකරයි (පරීක්ෂා කළ bash, zsh, tcsh. Tcsh ක්‍රියා කළේ නැත).
yoonix

භාවිතා nohupරැකියාවක් පාලනය ෂෙල් වෙනස්. නවීන කවච HUPපසුබිම් ක්‍රියාවලියට යවන්නේ නැත . අද්විතීය ගොනු නාමයකට හරවා යැවීම ගෙවීමට ඇති කුඩා මිලකි.
පැටවුන්

මෙහි භාවිතා කිරීමේ අවස්ථාව තෝරා ගැනීම යනු ස්වයංක්‍රීයව ලොග් ගොනුවක් නිර්මාණය කරන ප්ලස් සමඟ පර්යන්තය දූෂණය කිරීම සඳහා stderr සහ stdout වැළැක්වීමයි.
බ්රියම්

2
command > file.log 2>&1 & disownඊට වඩා ටිකක් දිගු nohup command &නමුත් මම හිතන්නේ ඒක තමයි @ චික්ස් යෝජනා කළේ.
joeytwiddle

35

මෙය ඔබට අවශ්‍ය දේ විය හැකිය

my_command > output.log 2>&1 &

මෙය ඔබගේ විධානය ආරම්භ කරනු ඇත, output.logඔබට නියම කළ හැකි සමහරක් වෙත stdout සහ stderr යන දෙකම හරවා යවනු ලැබේ. ප්‍රතිදානය කිසිසේත් ගබඩා කිරීමට ඔබ අකමැති නම් - ඔබට /dev/nullසත්‍ය ගොනුවක් වෙනුවට භාවිතා කළ හැකිය .

&විධාන පසුබිමේ ක්‍රියාත්මක වන අතර එමඟින් විධාන ක්‍රියාත්මක වන විට දිගටම යෙදවිය හැක. 2>&1සියලු ප්‍රතිදානයන් හසු වන පරිදි stderr stdout වෙත හරවා යවයි.

එසේම, ඔබ මෙවැනි විධානයක් ක්‍රියාත්මක කරන විට, ඔබට මේ හා සමාන කර්නලයෙන් තහවුරු කිරීමක් ලබා ගත යුතුය: [2] 1234 මෙයින් අදහස් කරන්නේ ඔබේ ක්‍රියාවලිය පසුබිමේ ක්‍රියාත්මක වන බවත් එහි හැඳුනුම්පත බවත් 1234, එබැවින් ඔබට අවශ්‍ය නම් එය පසුව මරා දැමිය හැකියkill -9 1234


2
ස්තූතියි, 2>&1ඉතා වැදගත් coz විධානය අසමත් විය හැකි අතර සමහර අවස්ථාවලදී දෝෂය ප්‍රතිදානය කිරීමට උත්සාහ කරන්න!
ericn

1
ඉහත පිළිතුරු ස්තූති නොකරන විට මෙය ක්‍රියාත්මක විය.
ඩොමගොජ්

10

තිරය හෝ ටීඑම්එක්ස් දෙස බලන්න . සමඟ උදාහරණයක් tmux:

$ tmux new -d 'longrunningcommand'

පසුබිමට '&' ​​භාවිතා කරන අනෙක් පිළිතුරු ක්‍රියාත්මක වන අතර, ඔබ stdout (සහ stderr!) වෙත හරවා යැවිය යුතුය. එසේ නොකර, ප්‍රතිදානය කෙලින්ම ඔබේ කවචයට යන අතර ඔබට ඇති වෙනත් ප්‍රතිදානයන් සමඟ මිශ්‍ර වේ.

ඔබ දිගු විධානයක් ක්‍රියාත්මක කර පිටව ගියහොත් හෝ විසන්ධි වුවහොත් පසුබිම ද අසාර්ථක වේ. පද්ධතිය ඔබේ රැකියාව විනාශ කරයි.

ඔබ තිරය හෝ ටීඑම්එක්ස් ගැන හුරු නැතිනම්, ඒවා මූලික වශයෙන් ඔබේ කවචයෙන් සම්පූර්ණයෙන්ම ඉවත් වීමට ඉඩ දෙයි. ඔබේ වැඩසටහන පසුබිම් කරනවා වෙනුවට, ඔබ සම්පූර්ණ කවචය පසුබිම් කරයි. ඔබට වෙනත් පරිගණකයකින් පවා පසුව එය වෙත මාරු විය හැකිය. මෙම භාවිත අවස්ථාවෙන් ඔබ්බට ඔබට ප්‍රයෝජනවත් විය හැකි හෝ නොතිබිය හැකි තවත් විශේෂාංග දෙකම ඔවුන් සතුව ඇත.

තිරය ​​යනු පැරණි උත්සාහ කළ සහ සත්‍ය වැඩසටහනයි; tmux වඩා තරුණ නමුත් තිරයේ අතීතයෙන් ඉගෙන ගෙන ඇත.


මෙම පිළිතුර සත්‍ය පිළිතුරක් මග හැරී ඇති අතර එය RTFM එකක් මෙන් පෙනේ.
Lloeki

5

(සම්පූර්ණත්වය සඳහා - දැනටමත් පිළිතුරු දී ඇත :) විධානයෙන් &පසුව එකතු කිරීමෙන් ඔබ පසුබිමක් තුළ විධානයක් තබයි:

long_command with arguments > redirection &

ඔබගේ ප්‍රශ්නයේ අනෙක් කොටස ආමන්ත්‍රණය කිරීම සඳහා මම මෙම පිළිතුර එක් කරමි:

ප්‍රගතියේ පසුබිම් විධාන පෙන්වීම සඳහා දඟ පන්දු යවන්නාට සමාන සමානකමක් නොමැත, නමුත් ටයිප් කිරීමෙන් jobsහෝ පසුබිම් විධාන වල තත්වය ඔබට දැකගත හැකිය jobs -l. එය ඔබගේ පසුබිම් විධාන පෙන්වනු ඇති අතර, ඒවා ක්‍රියාත්මක වන්නේද, සං signal ා හරහා නතර වී තිබේද (උදා: සමඟ ^Z), හෝ ඉඳහිට නතර වන්නේ ඔවුන් ඔබෙන් අන්තර්ක්‍රියාකාරී ආදානය බලාපොරොත්තුවෙන් සිටින බැවිනි.


long_command with arguments &> redirection &මෙම නැවත හරවා යැවීමට stderr
අයිස් ජාලාව

4

භාවිතයෙන් ඔබට පසුබිමක් තුළ වැඩසටහනක් ක්‍රියාත්මක කළ හැකිය &. උදාහරණයක් ලෙස, ඔබට උදාහරණයක් ලෙස ධාවනය කිරීමට අවශ්‍ය නම් yum install XyZ, ඔබට ධාවනය කළ හැකිය:

yum install XyZ &

මෙම stdoutවැඩසටහන හෝ ප්රතිදානය භාවිතා කරමින් යොමු කළ හැක >ගොනුව නැවත ලියවෙනු කිරීම, හෝ >>ගොනුවක් එකතු කිරීමට. උදාහරණයක් ලෙස, ඔබට yumගොනුවක් පුරනය කිරීමට අවශ්‍ය නම් yum.log:

yum install XyZ > yum.log &

නැතහොත්, පවතින ගොනුවකට ප්‍රතිදානය එක් කිරීමට ඔබට අවශ්‍ය නම් log:

yum install XyZ >> log &

දෝෂ මුද්‍රණය කර ඇති stderrඅතර ඒවා stdoutඑකම ආකාරයකින් ගොනුවකට හරවා යැවිය හැක, නමුත් භාවිතා කරන්නේ 2>:

yum install XyZ 2> errors
yum install XyZ 2>> errors

ඔබ මේ දෙකම නැවත හරවා යැවීමට අවශ්ය නම්, stderrහා stdout, ඔබ භාවිතා කළ හැකිය &>:

yum install XyZ &> output
yum install XyZ &>> output

2

ඔබට පසු විධාන ක්‍රියාත්මක &කිරීමෙන් පසු ලකුණක් තැබිය හැකිය.

උදාහරණයක් වශයෙන්:

areallylong_command &

එය පසුබිමේ ධාවනය කරයි.

ඔබ යමක් කරන අතරතුර ඔබේ පර්යන්තයේ නොපෙන්වන පරිදි ඔබට stdout / stderr සුදුසු ලිපිගොනු වෙත නැවත හරවා යැවිය හැකිය.

වැඩි විස්තර සඳහා මෙය බලන්න: http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-3.html


0

ඔබේ දිගුකාලීන කාර්යය ආරම්භ කිරීමට පෙර 'තිර' විධානය භාවිතා කිරීමට උත්සාහ කරන්න, එවිට ඔබ වෙන් වූ විට ඔබට නැවත අවශ්‍ය වූ විට 'screen -r -d' සමඟ නැවත සම්බන්ධ කළ හැකිය. Ssh හෝ වෙනත් ජාල සම්බන්ධතා හරහා ටර්මිනලයක් භාවිතා කරන විට ඒවා සමහර විට සේවාදායකයට ඇති නරක සම්බන්ධතාවයෙන් බිඳී යා හැකි බව මට පෙනී ගියේය. එය 'තිරයක්' තුළ ධාවනය කිරීමෙන් මෙම ගැටළුව විසඳේ.

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.