Nohup, disown සහ & අතර වෙනස


604

අතර ඇති වෙනස්කම් මොනවාද?

$ nohup foo

හා

$ foo &

හා

$ foo & 
$ disown

38
foo &!ආරම්භයේ සිටම එය ප්‍රතික්ෂේප කිරීමට සමාන විය යුතු දේ ද තිබේ .
user4514

31
Bash සහාය නොදක්වයි &!.
ජොනස් කොංස්ලන්ඩ්

2
set -mරැකියා පාලනය සක්‍රීය කිරීමටද ඔබට භාවිතා කළ හැකිය . Unix.stackexchange.com/questions/196603/…
A.Danischewski

9
සඳහනක් දැකීමට මා කැමතිය setsid, එය සම්බන්ධ වන්නේ කෙසේද disownසහnohup
යංෆ්‍රොග්

@ යූන්ග්ෆ්‍රොග් දැන් එකක් තිබේ
මැරිනෝස් ඇන්

Answers:


599

&(සහ නැවත හරවා යැවීමකින් තොරව ) අන්තර්ක්‍රියාකාරී කවචයකින් (පර්යන්තයකට සම්බන්ධ කර) වැඩසටහනක් ආරම්භ කළහොත් කුමක් සිදුවේදැයි අපි මුලින්ම බලමු . එබැවින් ඔබ ටයිප් කළ බව උපකල්පනය කරමු foo:

  • ක්‍රියාවලිය ක්‍රියාත්මක fooවේ.
  • මෙම ක්‍රියාවලියට ෂෙල් එකෙන් stdin, stdout සහ stderr උරුම වේ. එබැවින් එය එකම පර්යන්තයට සම්බන්ධ වේ.
  • කවචයට a ලැබෙන්නේ නම් SIGHUP, එය ද SIGHUPක්‍රියාවලියට a යවයි (එය සාමාන්‍යයෙන් ක්‍රියාවලිය අවසන් වීමට හේතු වේ).
  • එසේ නොමැතිනම් ක්‍රියාවලිය අවසන් වන තුරු කවචය බලා සිටියි (අවහිර කර ඇත).

දැන්, අපි ක්‍රියාවලිය පසුබිමට දැමුවහොත් කුමක් සිදුවේදැයි බලමු, එනම් ටයිප් කරන්න foo &:

  • ක්‍රියාවලිය ක්‍රියාත්මක fooවේ.
  • මෙම ක්‍රියාවලියට කවචයෙන් stdout / stderr උරුම වේ (එබැවින් එය තවමත් පර්යන්තයට ලියයි).
  • ප්‍රතිපත්තිමය වශයෙන් ද ක්‍රියාවලිය stdin උරුම කර ගනී, නමුත් එය stdin වෙතින් කියවීමට උත්සාහ කළ විගසම එය නතර වේ.
  • එය ෂෙල් කළමනාකරණය කරන පසුබිම් රැකියා ලැයිස්තුවට ඇතුළත් කර ඇත, එයින් අදහස් කරන්නේ විශේෂයෙන්:
    • එය සමඟ ලැයිස්තුගත කර ඇති jobsඅතර භාවිතයෙන් ප්‍රවේශ විය හැකිය %n( nරැකියා අංකය කොහේද ).
    • එය භාවිතයෙන් පෙරබිම් රැකියාවක් බවට පත් කළ හැකි fgඅතර, එය දිගටම භාවිතා කරන්නේ ඔබ එය භාවිතා නොකරනු ඇත &(සහ සම්මත ආදානයෙන් කියවීමට උත්සාහ කිරීම නිසා එය නැවැත්වූයේ නම්, දැන් එය පර්යන්තයෙන් කියවීමට ඉදිරියට යා හැකිය).
    • කවචයට a ලැබුනේ නම් SIGHUP, එය SIGHUPක්‍රියාවලියට a යවයි . කවචය මත පදනම්ව සහ සමහර විට කවචය සඳහා සකසා ඇති විකල්ප මත පදනම්ව, කවචය අවසන් කිරීමේදී එය SIGHUPක්‍රියාවලියට යවනු ඇත .

දැන් disownෂෙල් එකේ රැකියා ලැයිස්තුවෙන් කාර්යය ඉවත් කරයි, එබැවින් ඉහත සඳහන් සියලුම උප ස්ථාන තවදුරටත් අදාළ නොවේ ( SIGHUPෂෙල් එක මඟින් යවන ක්‍රියාවලිය ද ඇතුළුව ). කෙසේ වෙතත් එය තවමත් පර්යන්තයට සම්බන්ධ වී ඇති බව සලකන්න , එබැවින් ටර්මිනලය විනාශ වුවහොත් (එය සිදුවිය හැක්කේ එය නිර්මාණය කරන ලද xtermහෝ වැනි ssh, සහ පාලක වැඩසටහන අවසන් වුවහොත්, xterm වසා දැමීමෙන් හෝ SSH සම්බන්ධතාවය අවසන් කිරීමෙන් ) , සම්මත ආදානයෙන් කියවීමට හෝ සම්මත ප්‍රතිදානයට ලිවීමට උත්සාහ කළ විගසම වැඩසටහන අසාර්ථක වනු ඇත.

කුමක්ද nohupකරන්නේ, අනිත් අතට, ඵලදායී ලෙස පර්යන්තය ක්රියාවලිය වෙන් වන්නේ:

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

බව සටහන nohupනැහැ නැහැ ෂෙල් ගේ රැකියා පාලනය සිට එම ක්රියාවලිය, ඉවත් කිරීම හා ද පසුබිමේ තබා නැත (නමුත් එකක් පෙරට ආ සිට nohupරැකියා අඩු හෝ වැඩි නිෂ්ඵල, ඔබ සාමාන්යයෙන් එය පසුබිම බවට භාවිතා දමා කියලා &). නිදසුනක් ලෙස, මෙන් නොව disown, නොහප් කාර්යය අවසන් වූ විට කවචය තවමත් ඔබට කියනු ඇත (ෂෙල් එක පෙර අවසන් නොකළේ නම්, ඇත්ත වශයෙන්ම).

එබැවින් සාරාංශ කිරීමට:

  • & කාර්යය පසුබිමට දමයි, එනම් ආදානය කියවීමට උත්සාහ කිරීම අවහිර කරයි, සහ කවචය සම්පූර්ණ වන තෙක් බලා නොසිටිනු ඇත.
  • disownෂෙල් එකේ රැකියා පාලනයෙන් ක්‍රියාවලිය ඉවත් කරයි, නමුත් එය තවමත් එය පර්යන්තයට සම්බන්ධ කර තබයි. ප්‍රති results ලවලින් එකක් නම් කවචය එය නොයවන බවය SIGHUP. නිසැකවම, එය යෙදිය හැක්කේ පසුබිම් රැකියා සඳහා පමණි, මන්ද පෙරබිම් රැකියාවක් ක්‍රියාත්මක වන විට ඔබට එයට ඇතුළු විය නොහැක.
  • nohupඑහි ප්රතිදානය යළි-යොමුකරයි, ටර්මිනලය සිට එම ක්රියාවලිය විසන්ධි nohup.outසිට එය හා පලිස් SIGHUP. එක් බලපෑමක් (නම් කිරීම) ක්‍රියාවලියට යවන ලද කිසිවක් නොලැබීමයි SIGHUP. එය රැකියා පාලනයෙන් සම්පූර්ණයෙන්ම ස්වාධීන වන අතර ප්‍රතිපත්තිමය වශයෙන් පෙරබිම් රැකියා සඳහා ද භාවිතා කළ හැකිය (එය එතරම් ප්‍රයෝජනවත් නොවේ).

8
+1 ස්තූතියි. ප්‍රතික්ෂේප කිරීම, නොහූප් සහ එකට භාවිතා කරන විට කුමක් සිදුවේද?
ටිම්

19
ඔබ මේ තුනම එකට භාවිතා කරන්නේ නම්, ක්‍රියාවලිය පසුබිමේ ක්‍රියාත්මක වන අතර, ෂෙල් එකේ රැකියා පාලනයෙන් ඉවත් කර පර්යන්තයෙන් effectively ලදායී ලෙස විසන්ධි වේ.
celtschk


2
disown %1සහ අතර ඇති වෙනස disown -h %1කුමක්ද? දෙවැන්න පර්යන්තය පිටවන තුරු සාමාන්‍ය රැකියාවක් ලෙස (නමුත් HUP සං signal ාව නොසලකා හරිනු ඇත)?
schemacs

5
සමහර විට ඇතුළු වටිනා (foo&)උප කබොළ
jiggunjer

174

&ක්‍රමලේඛය පසුබිමේ ක්‍රියාත්මක වීමට හේතු භාවිතා කිරීම , එම නිසා වැඩසටහන අවසන් වන තුරු අවහිර කිරීම වෙනුවට ඔබට නව ෂෙල් විමසුමක් ලැබෙනු ඇත. nohupසහ disownබොහෝ දුරට සම්බන්ධ නැති; ඒවා SIGHUP (Hangup) සං als ා යටපත් කරයි, එබැවින් පාලක පර්යන්තය වසා දැමූ විට වැඩසටහන ස්වයංක්‍රීයව විනාශ නොවේ. nohupකාර්යය මුලින්ම ආරම්භ වූ විට මෙය කරයි. nohupඑය ආරම්භ වන විට ඔබ රැකියාවක් නොකරන්නේ නම් , ඔබට disownක්‍රියාත්මක වන රැකියාවක් වෙනස් කිරීමට භාවිතා කළ හැකිය ; කිසිදු තර්කයකින් තොරව එය වර්තමාන රැකියාව වෙනස් කරයි, එය දැන් පසුබිම් කළ එකකි


10
Nohup සහ disown අතර සුළු වෙනස: ප්‍රතික්ෂේප කිරීමේ විධානය එය ඔබගේ රැකියා ලැයිස්තුවෙන් ඉවත් කරයි; nohup එසේ නොවේ.
ෂෝන් ජේ. ගොෆ්

198
nohupහා disownදෙකම මැඩීමට ප්රකාශ කළ හැකි SIGHUPනමුත්, විවිධ ක්රම. nohupවැඩසටහන මඟින් සං signal ාව මුලින් නොසලකා හැරීමට සලස්වයි (වැඩසටහන මෙය වෙනස් කළ හැකිය). nohupපාලක පර්යන්තයක් නොතිබීමට වැඩසටහනට අවශ්‍ය කටයුතු සම්පාදනය කිරීමට ද උත්සාහ කරයි, එවිට SIGHUPපර්යන්තය වසා ඇති විට එය කර්නලය මඟින් යවනු නොලැබේ . disownකවචයට තනිකරම අභ්‍යන්තරය; එය SIGHUPඅවසන් වන විට කවචය නොයැවීමට හේතු වේ.
ගිලෙස්ගේ SO- නපුරු වීම නවත්වන්න '

28
Il ගිලස්, ඔබේ අදහස් දැක්වීමම වටී.
lesmana

6
disownරැකියා ලැයිස්තුවෙන් රැකියාව ඉවත් කිරීම සම්බන්ධව @ ෂෝන් ජේ. ගොෆ්ගේ ප්‍රකාශය පිළිබඳ පැහැදිලි කිරීමක් පමණි . ඔබ විකල්පයක් සඳහන් නොකරන්නේ නම්, එය රැකියා ලැයිස්තුවෙන් ඉවත් කරයි. කෙසේ වෙතත් , ඔබ -hවිකල්පය සඳහන් කරන්නේ නම්, එක් එක් රැකියා ස්ථානය වගුවෙන් ඉවත් නොකෙරේ . ඒ වෙනුවට, එය සිදු කරන්නේ SIGHUPකවචයට a ලැබෙන්නේ නම් එය රැකියාවට යවනු නොලැබේ SIGHUP.
tacot අඟහරුවාදා

4
පැහැදිලි කිරීම සඳහා, භාවිතා කිරීමෙන් &ඔබට පර්යන්තයක් ලබා නොදෙන අතර, එය stdinක්‍රියාවලියෙන් and ත් වී එය පසුබිම තුළ ක්‍රියාත්මක වීමට හේතු වේ, නමුත් දෙකම වන stdoutඅතර stderrඑය තවමත් පවතින ටයිටියට සම්බන්ධ වේ. මෙයින් අදහස් කරන්නේ ඔබට විවිධ වැඩසටහන් වලින් එකට මිශ්‍ර වී පෙළ ලබා ගත හැකි බවයි, එය ඔබ කළහොත් තරමක් කරදරකාරී විය හැකි gimp &අතර වෙනත් දෙයක් සඳහා එම tty භාවිතා කිරීමට උත්සාහ කරන අතරතුර GTK + දෝෂ රාශියක් ලබා ගත හැකිය.
ෆ්‍රෑන්ක්

9

නොනවතින විධානයක් අනුගමනය කරමින් (උදා tail) පසුබිමේ සොෆිස් ධාවනය කිරීමට උත්සාහ කරන මගේ අත්දැකීම මෙන්න . මෙම උදාහරණය සඳහා මම භාවිතා කරමි sleep 100.

සහ

#!/bin/bash
/opt/libreoffice4.4/program/soffice -invisible -nofirststartwizard &
sleep 100

මම සොෆිස් ලොග් දකිමි / එබීමෙන් - සොෆිස් නතර වේCtrlC

nohup .. &

#!/bin/bash
nohup /opt/libreoffice4.4/program/soffice -invisible -nofirststartwizard &
sleep 100

මම සොෆිස් ල logs-සටහන් එබීමෙන් / එබීමෙන් නොපෙනේ - සොෆිස් නතර වේCtrlC

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

#!/bin/bash
/opt/libreoffice4.4/program/soffice -invisible -nofirststartwizard & disown
sleep 100

මම සොෆිස් ලොග් දකිමි / එබීමෙන් - සොෆිස් නතර වේCtrlC

setid .. &

#!/bin/bash
setsid /opt/libreoffice4.4/program/soffice -invisible -nofirststartwizard &
sleep 100

මම බලන්න soffice ලඝු-සටහන් එබීමෙන් / Ctrl- Csoffice නැත STOP

: ඉඩ ඉතිරි කර ගැනීම සඳහා
nohup setsid ..: ලඝු-සටහන් / soffice වෙන්නේ නෑ මත නැත STOP Ctrl-C
nohup සමග & disownඅඩංගු නොවේ ලඝු-සටහන් /: අවසානයේ soffice නැවතුම්පළවල Ctrl-C


2
සෙට්සිඩ් ගැන සඳහන් කිරීම සහ එම විශේෂිත තත්වය තුළ සිදුවන්නේ කුමක්ද යන්න පෙන්වීම මම අගය කරන අතරම, වඩාත් ගැඹුරු පිළිතුරක් දැකීමට මා කැමතිය. දෘශ්‍යමාන (කවචය හෝ පර්යන්තය වසා දැමූ විට කුමක් සිදුවේද, ප්‍රතිදානය යන්නේ කොතැනටද? පිළිගත් පිළිතුර ඒ සඳහා කදිම පදනමකි.
යංෆ්‍රොග්

1
@YoungFrog මම මේකට එකඟයි!
Marinos An

මට නම්, nohup ⟨command⟩ & disownනිර්මාණය කළ ක්‍රියාවලිය නතර නොවේ Ctrl+C.
k.stm

try k.stm ඔබ උත්සාහ කළාද soffice? sofficeවිධානයට වෙනස් දෙයක් ඇති බව පෙනේ. එබැවින් මම එය මෙහි ඇතුළත් කිරීම රීති ව්‍යතිරේකයක් ලෙස සලකා බැලුවෙමි. උදා: භාවිතා කරන විට nohup .. &:, Ctrl-cසාමාන්‍යයෙන් එබීමෙන් විධානය නතර නොවේ, නමුත් sofficeඑය සිදු වේ. මම මේ කෙනෙකු පියවර තෙක් බලා ඇයි මේ soffice සමග සිදු :) පැහැදිලි
Marinos ක

Ar මාරිනෝස් ඔව්, මම කළා. මම දුවගෙන nohup soffice &ඇවිත් Ctrl+C. බලාපොරොත්තු වූ පරිදි කිසිවක් සිදු නොවීය.
k.stm
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.