- Ang paggamit ng nohup at background execution ay nagbibigay-daan sa mga proseso na manatiling aktibo kahit na matapos mong isara ang pandulo o ang sesyon SSH.
- Ang pagkontrol sa trabaho gamit ang &, Ctrl+Z, bg, fg at ang panloob na utos ay mag-aalis ng mga link sa mga prosesong nailunsad na mula sa console.
- Ang mga tool tulad ng screen o tmux ay lumilikha ng mga persistent terminal session na mainam para sa mahahabang gawain sa mga remote server.
- Ang pag-unawa sa gawi ng mga pager tulad ng Less ay pumipigil sa pagkalito sa mga paged exit na may mga "blocked" na terminal.
Kung madalas kang nagtatrabaho gamit ang terminal sa LinuxMaaga o huli, makakaranas ka ng karaniwang sitwasyon: maglulunsad ka ng isang utos na tumatagal ng mahabang panahon (isang rsync, isang malaking natuklasan, isang script (isang malaking kopya ng file, isang download gamit ang youtube-dl…) at, kapag isinara mo ang window o natapos ang SSH session, walang awang namamatay ang proseso. Minsan ay nagbukas ka pa ng graphical application (tulad ng gedit o Firefox) mula sa console at kapag isinara mo ang terminal, tinatanggal din ito kasama nito.
Ang magandang balita ay nag-aalok ang sistema ng ilang paraan upang maiwasan ang problemang ito.Maaari mong gawin ang iyong comandos Patuloy pa rin ang mga ito sa paggana kahit isara mo ang terminal, kung maputol ang koneksyon sa SSH, at kahit na mag-log out ka sa iyong user account. Tingnan natin, nang mahinahon at detalyado, kung paano gumagana ang mga tool na tulad nito. nohup, itakwil, ang paggamit ng &, ang pagkontrol sa trabaho kasama ang Ctrl + Zat mas advanced na mga alternatibo tulad ng tabing o tmux, Plus Trick praktikal para sa pang-araw-araw na paggamit.
Bakit humihinto ang mga proseso kapag sarado ang terminal?
Upang maunawaan kung paano pigilan ang paghinto ng isang utos Kapag isinasara ang console, makakatulong na maunawaan muna kung bakit ito nangyayari. Kapag binuksan mo ang isang terminal (bash, zsh, atbp.) at nagsagawa ng isang command, ang prosesong iyon ay maiuugnay sa sesyon ng iyong terminal at ituturing na isang "trabaho" o gawain ng shell. Hangga't aktibo ang terminal, maaaring ipakita ng shell ang output nito at kontrolin ang pagpapatupad nito.
Kapag isinara mo ang terminal window o naantala ang SSH sessionAng sistema ay nagpapadala ng isang senyales na tinatawag sa mga kaugnay na proseso. FOLLOW UP (hangup). Ang hudyat na ito ay nagpapahiwatig na ang control session ay sarado na. Maraming programa, kapag nakatanggap ng SIGHUP, ay agad na tinatapos ang kanilang pagpapatupad, na siyang dahilan kung bakit humihinto ang iyong mahahabang utos o mga graphical na aplikasyon.
Ang susi ay pigilan ang signal na iyon na sirain ang proseso o para "i-unlink" ang command mula sa terminal na naglunsad nito, para hindi na ito maapektuhan ng pagsasara ng console. Ganoon nga ang gusto ng mga utility nohup o ang panloob na utos itakwil ng bash, kasama ang pagpapatupad sa background.
Hindi lamang mga text command ang naaapektuhan ng ganitong pag-uugali: kung maghahagis ka, halimbawa, gedit o firefox Mula sa terminal, mananatili silang naka-link dito. Kapag isinara mo ang console, magsasara rin ang graphical application, maliban na lang kung maayos mo itong na-disconnect mula sa terminal.
Gamitin ang nohup para makagawa ng utos na makakaligtas kahit na magsara ang terminal

Ang pinakadirekta at pinakasimpleng kagamitan para sa mga kasong ito ay nohupAng pangalan nito ay nagmula sa "no hang up" at ang tungkulin nito ay napaka-espesipiko: ang gawing balewalain ng proseso ang signal na SIGHUP. Sa madaling salita, kung maglalabas ka ng utos na may nohupMagpapatuloy ang prosesong ito kahit isara mo ang terminal, isara ang graphical session, o maputol ang koneksyon ng SSH.
Ang pangunahing sintaks ay napakasimple: nakalagay ito nohup bago ang utos na gusto mong isagawa, at kadalasan, isang & Panghuli, para ipadala ito sa background:
nohup ./programa.sh &
Ano nga ba ang ginagawa ng utos na ito? Sa isang banda, nohup Sinasabi nito sa sistema na huwag pansinin ang proseso ng SIGHUP. Sa kabilang banda, kapag naglalagay & Panghuli, sasabihin mo sa shell na patakbuhin ang command sa background, at agad na ibabalik ang prompt para maipagpatuloy mo ang paggamit ng terminal.
Bukod dito, nohup awtomatikong nagre-redirect sa output ng programa sa isang file na tinatawag na nohup.out Maliban na lang kung iba ang sabihin mo, ang file na iyon ay gagawin sa direktoryo kung saan mo pinapatakbo ang command at ise-save ang lahat ng dapat sana ay ipapakita ng program sa screen. Kung gusto mong suriin ang nangyari mamaya, gawin lang ang ganito:
cat nohup.out
Sa mahahabang gawain sa pangangasiwa ng sistema Ito ay lalong kapaki-pakinabang: maaari kang mag-iwan ng paghahanap, isang backupKung may isinasagawang maintenance script o isang mabigat na pag-download, tahimik na isara ang iyong SSH session at tingnan ang resulta mamaya.
Praktikal na halimbawa: maramihang paghahanap gamit ang nohup

Ipagpalagay na gusto mong hanapin ang lahat ng mga file sa iyong /home directory na mas malaki sa 100 MBMaaaring magtagal iyon, at malamang na ayaw mong ma-hijack ang terminal hangga't hindi ito natatapos. Maaari mong ilunsad ang command gamit ang nohup at i-redirect ang output nito sa isang file ng mga resulta:
nohup find /home -type f -size +100M > ~/resultados &
Maraming mahahalagang bahagi ang kasangkot sa utos na ito.:
nohup: nagiging sanhi ng pagbalewala ng proseso sa nakasarang sesyon.find /home -type f -size +100M: naghahanap ng mga normal na file sa /home na may sukat na higit sa 100 MB.> ~/resultados: ipinapadala ang lahat ng karaniwang output sa file~/resultados, na maglalaman ng listahan ng mga file na natagpuan.&: Patakbuhin ang command sa background para maibalik mo ang iyong terminal prompt.
Kapag nailunsad na, maaari mong ligtas na isara ang terminal o sesyon.Ang paghahanap ay patuloy na tatakbo sa background. Sa ibang pagkakataon, kapag nag-log in ka muli, maaari mong suriin ang mga nilalaman ng file ng mga resulta gamit ang:
cat ~/resultados
Kung mas gusto mong walang mabuo na output file O kung gusto mong itapon ang karaniwang output at mga error, maaari mo itong i-redirect sa /dev/null:
nohup find /home -type f -size +100M > /dev/null 2>&1 &
Gamit ang kombinasyon ng mga pag-redirect na iyonParehong nawawala ang normal na output at ang mga mensahe ng error, at tumatakbo ang proseso sa background nang hindi pinapansin ang signal ng pagkaantala.
Kumpletuhin ang mga proseso pagkatapos mag-log out o mag-SSH out gamit ang nohup

Ang default na pag-uugali sa karamihan ng mga shell Ang dahilan ay ang mga proseso sa background ay natatapos kapag isinara mo ang terminal dahil tinatapos ang mga ito, kahit na inilunsad mo ang mga ito gamit ang &Madali itong makikita sa isang simpleng halimbawa gamit ang sleep:
sleep 100 &
Nagsisimula ito ng proseso na naghihintay lamang ng 100 segundo.Kung nagpapatakbo ka ng isang ps aux | grep sleep Makikita mo ang aktibong proseso. Pero sa sandaling isara mo ang terminal at magbukas ng bago, kapag inilista mo ulit ang mga proseso, makikita mo na sleep Wala na siya ngayon.
Para manatili ang parehong utos kahit na isara ang terminal. ilunsad lang itong muli gamit ang nohup sa harap ng:
nohup sleep 100 &
Aabisuhan ka mismo ng tool na itinatapon nito ang karaniwang input at itatapon ang output sa nohup.outKung gagawa ka ngayon ng ps aux | grep sleepMakikita mo ang prosesong isinasagawa. Isara ang terminal, magbukas ng isa pa, at ilista muli ang mga utos: sleep Mananatili itong aktibo, kahit na mag-log in ka gamit ang ibang user sa ibang TTY.
Ang parehong pattern na ito ay mahalaga kapag nagtatrabaho gamit ang SSH gamit ang isang remote server, isang Raspberry Pi, o isang VPS. Halimbawa, kung kumokonekta ka sa:
ssh pi@192.168.1.220
At gusto mong maglunsad ng mahabang pag-download gamit ang youtube-dl Nang hindi kinakailangang panatilihing bukas ang sesyon ng SSH, maaari kang gumawa ng tulad ng:
nohup youtube-dl https://www.youtube.com/playlist?list=LO_QUE_SEA >/dev/null 2>&1 &
Matapos tingnan ang tagatukoy ng proseso at kunin ang prompt, maaari mo na ngayong patakbuhin exit Para isara ang SSH, magpapatuloy ang pag-download nang walang problema at maaari kang ligtas na magdiskonekta; pagkatapos ay maa-access mo ang server para tingnan ang mga na-download na file.
Tandaan na ang ilang mga programa tulad ng wget Dinisenyo na ang mga ito upang maayos na mahawakan ang mga session break depende sa kung paano mo ginagamit ang mga ito, ngunit may nohup Tinitiyak mo na ang proseso ay hindi makakatanggap ng kinatatakutang SIGHUP.
Ipadala ang mga proseso sa background: &, jobs, fg at bg
Higit pa nohupAng Linux shell ay may sariling sistema ng pagkontrol sa trabaho na nagbibigay-daan sa iyong suspindihin, ipagpatuloy, at ilipat ang mga proseso sa pagitan ng foreground at background. Hindi nito mapipigilan ang pagtatapos ng mga ito kapag isinara mo ang terminal, ngunit ito ang kinakailangang pundasyon para sa pagsasama-sama ng mga ito sa disown.
Kapag nagdagdag ka ng a & sa dulo ng isang utosSinasabi mo sa shell na patakbuhin ito sa background. Halimbawa:
rsync home/music/* usr/otro/home/music/ &
Ang shell ay magpapakita sa iyo ng isang bagay tulad ng [1] 1234Saan [1] ay ang numero ng trabaho at 1234 Ang PID (process identifier). Aktibo pa rin ang trabahong iyon, ngunit malaya ka na ngayong mag-type ng iba pang mga utos sa terminal.
Kung sa halip na gamitin & Ilulunsad mo ang utos nang normal at pagkatapos ay pindutin mo Ctrl + ZIhihinto (isususpinde) mo ang proseso. Lilitaw ang isang mensaheng tulad nito:
[1]+ Stopped gedit
Sa sandaling iyon, ang utos ay itinigil, hindi isinasagawaMaaari mong tingnan ang mga aktibong trabaho gamit ang:
jobs
Para ipagpatuloy ito sa background, ginagamit mo bg kasunod ang numero ng trabaho:
bg 1
Kung gusto mo itong ibalik sa harapan (upang mabawi ang kontrol sa terminal), gagamitin mo fg 1Ang paghawak na ito ng Ctrl+Z, jobs, bg y fg Ito ay lubhang kapaki-pakinabang kapag nagtatrabaho ka sa maraming gawain nang sabay-sabay sa isang terminal.
fg 1
I-unlink ang isang proseso mula sa terminal gamit ang disown
Ang panloob na utos disown mula sa bash Ito ang nawawalang piraso kapag mayroon ka nang prosesong tumatakbo at napagpasyahan mong ayaw mong mamatay ito kapag isinara mo ang terminal, ngunit hindi mo ito unang inilunsad gamit ang nohupAng ginagawa nito disown Kabilang dito ang pag-alis ng trabahong iyon mula sa job table ng shell at pagpigil dito sa pagtanggap ng hang-up signal kapag nag-log off ka.
Isipin mong binuksan mo ang gedit mula sa terminal dahil nag-eedit ka ng mabilisang file:
gedit archivo.txt
Lumilitaw ang gedit window sa iyong desktopGayunpaman, kung isasara mo ang terminal ngayon, magsasara rin ang editor. Kung gusto mong panatilihing bukas ang gedit at maisara nang ligtas ang console, maaari mong sundin ang mga hakbang na ito:
1. Pansamantalang ihinto ang proseso pagpindot Ctrl + ZMakakakita ka ng ganito:
[1]+ Stopped gedit archivo.txt
2. Ipatupad disown -h %1 Para i-unlink ang application mula sa shell:
disown -h %1
Ang pagpipilian -h nagpapahiwatig na ang trabaho ay hindi dapat makatanggap ng SIGHUP, At %1 Ito ay tumutukoy sa trabaho bilang 1 (ang nakita mo noong pinindot mo ang Ctrl+Z). Maaari mong suriin ang mga trabaho gamit ang jobs Kung mayroon kang anumang pagdududa tungkol sa numero.
3. Ipadala ang proseso sa background para patuloy itong tumakbo:
bg 1
Mula sa puntong ito, ang gedit ay magiging ganap na independiyente sa terminal.Maaari mong ligtas na isara ang console; ang window ng editor ay mananatiling bukas at gumagana. Ang trick na ito ay mainam para sa mga madalas na naglulunsad ng mga graphical na application mula sa command line.
Kung nakapagsimula ka na ng isang programa gamit ang &, Halimbawa gedit &, inililigtas mo ang iyong sarili sa hakbang ng bg Dahil tumatakbo na ang trabaho sa background, kakailanganin mo na lang ang disown -h %n nararapat
Isa pang paraan: disown para sa mga utos na tumatakbo na sa background
Sa mga mabibigat na gawain tulad ng pagkopya gamit ang rsyncMinsan naaalala mong gusto mong isara ang terminal kapag tumatakbo na ang command. Kung sinimulan mo ito gamit ang isang & Mula sa simula, mas madali nang ihiwalay ito mula sa console gamit ang disown patuyuin.
Halimbawa, kung nagsusulat ka:
sudo rsync home/music/* usr/otro/home/music/ &
Ibabalik ng shell ang prompt At maaari ka nang magpatuloy sa pagtatrabaho. Kung sakaling magpasya kang isara ang terminal nang hindi ito ititigil rsync, tumakbo lang:
disown
Nang walang karagdagang mga parameter, disown kumilos sa huling trabaho na nasa job table mo. Mula sa sandaling iyon, ang proseso ay hindi na kokontrolin ng shell at hindi na makakatanggap ng termination command kapag isinara mo ang terminal.
Kung gusto mong maging mas malinaw O kung mayroon kang ilang mga trabahong ginagawa, maaari mo itong ilista gamit ang:
jobs
At pagkatapos ay ilapat disown sa isa partikular:
disown %2
Sa maraming pagkakataon, maaari kang pumili sa pagitan ng nohup y disown depende kung kailan mo naaalala na kailangang tapusin ang gawain. Kung pinag-iisipan mo ito bago ito simulan, gamitin ang nohupKung maaalala mo mamaya, gamitin mo ang disown.
Mga terminal multiplexer: screen, tmux, at iba pa
At nohup y disownMay mga mas advanced na kagamitan bilang screen, tmux o byobu Nag-aalok sila ng ibang solusyon sa problema: sa halip na i-unlink ang mga indibidwal na proseso, lumilikha sila ng mga persistent terminal session na maaari mong ikonekta at idiskonekta kahit kailan mo gusto.
Gamit ang isang terminal multiplexer tulad ng tmux o screen Maaari mong buksan ang isang sesyon, patakbuhin ang lahat ng iyong mga utos dito (kahit na maraming "panel" o "window" sa iisang sesyon), at pagkatapos ay ihiwalay ang mga ito. Ang sesyon ay patuloy na tatakbo sa background sa server, habang aktibo ang lahat ng proseso, kahit na isara mo ang terminal window o maputol ang koneksyon sa SSH.
Maaari kang kumonekta muli mamaya I-access ang parehong sesyon mula sa ibang terminal o computer sa pamamagitan ng SSH at makikita mo ang mga programa nang eksakto kung paano mo iniwan ang mga ito, kasama ang kanilang exit history na available pa rin. Para bang mayroon kang isang persistent terminal na nasa server.
Ang pamamaraang ito ay medyo mas kumplikado matutunan. na basta magsulat lang nohupNgunit kung madalas kang nagtatrabaho sa mga malayuang server, ang pagpapanatiling tumatakbo ng mahahabang proseso, mga interactive na sesyon (tulad ng mga text editor sa text mode) o mga tool sa pagsubaybay ay mas maginhawa.
Entre screen y tmuxMaraming modernong administrador ang may hilig na tmux dahil ito ay mas nababaluktot at aktibo sa pag-unlad, samantalang byobu Nag-aalok ito ng karagdagang patong ng "pagkakaibigan" sa ibabaw ng mga ito na may mas detalyadong mga shortcut at isang pinagsamang status bar.
Kontrolin ang mga paginator tulad ng Less kapag nagtatanong ng mga serbisyo
Isa pang gawi na lubhang nakalilito sa mga medyo bagong gumagamit Ito ang para sa ilang partikular na utos na gumagamit ng pager tulad ng less upang ipakita ang output. Ang isang tipikal na kaso ay ang sa systemctl status sshd Sa mga modernong distribusyon tulad ng Fedora, binubuksan nito ang output sa isang uri ng "viewer" na nagpapahiwatig ng isang bagay tulad ng "Lines 1-22/22 [END]".
Sa sitwasyong ito, ang utos ay hindi nakabitin.Nasa loob ka lang less (o ibang pager) na tinitingnan ang nilalaman. Para lumabas at bumalik sa prompt nang hindi isinasara ang terminal, pindutin lamang ang:
Q
Ang letrang "q" (para sa quit) ay nagsasara ng pager at ibabalik ka nito sa pamilyar na shell. Hindi mo na kailangang patayin ang terminal o magbukas ng bago; ang pag-uugaling ito ay dinisenyo nang tumpak upang ma-navigate mo ang output gamit ang mga arrow key, repage, maghanap ng teksto, atbp.
Sa maraming utos ng sistema (mga tala(mga katayuan ng serbisyo, mga tala ng sistema…) makakakita ka ng mga katulad na pattern. Kapag nakakita ka ng mensaheng nagpapahiwatig ng bilang ng mga linya, porsyento, o [END], isipin ang tungkol sa less at sa pagpindot q bago gumawa ng mas matinding bagay.
Karaniwang mga kaso ng pang-araw-araw na paggamit
Sa pagsasagawa, ang mga kagamitang ito ay pinagsama upang malutas ang mga partikular na sitwasyon. na paulit-ulit na inuulit kapag nagtatrabaho sa Linux. Ilang tipikal na halimbawa:
1. Mahahabang kopya o pag-synchronize (rsync, cp, mv)
Gusto mong kopyahin ang mga gigabyte ng data sa pagitan ng mga direktoryo o disk at kailangan mong isara ang iyong graphical session. Maaari mong ilunsad ang:
nohup rsync -avh /origen/ /destino/ > ~/rsync.log 2>&1 &
Ganito ka makakakuha ng talaan ng ginawa ng rsync at maaari kang magdiskonekta nang hindi pinapatay ang kopya.
2. Mabigat na paghahanap (hanapin, du, mga script ng pagsusuri)
Para siyasatin ang paggamit ng disk o hanapin ang malalaking file sa buong partisyon, gamitin ang nohup Halos mandatory ang pag-redirect sa isang file ng resulta kung alam mong matatagalan ito.
3. Download napakalaking o malayong mga script sa pamamagitan ng SSH
Luha youtube-dl, wget o ang pagsulat ng mahahabang script sa isang remote server at pagkatapos ay pagdidiskonekta ay isa sa mga pinakamahusay na bentahe ng nohup kasama ang SSH.
4. Binuksan ang mga graphical na aplikasyon mula sa terminal
Kung isa ka sa mga taong nagbubukas ng mga editor, browser, o graphics tool mula sa console, disown Matalik mong kaibigan 'yan dahil hindi mo iniiwan ang terminal na kumukuha ng espasyo sa desktop nang walang dahilan.
5. Mahahabang sesyon ng trabaho sa mga server
Kapag pinagsasama-sama ang ilang interactive na utos o mga sesyon ng pagsubaybay, kadalasan ay mas maginhawang gamitin screen o tmux para hindi mo na kailangang mag-alala kung ano ang mangyayari kung maputol ang koneksyon mo.
Ang pag-master sa mga mapagkukunang ito ay nagbibigay-daan sa iyo upang magtrabaho nang mas mahinahon.nang walang takot na mawalan ng oras ng pagproseso sa pamamagitan ng pagsasara ng maling window o dahil nagpasya ang iyong koneksyon sa WiFi na magpahinga muna.
Sa huli, ang pangkalahatang ideya ay napakasimple.Sa Linux, ang mga proseso ay nakatali bilang default sa terminal na naglulunsad sa mga ito at namamatay kapag ang terminal na iyon ay sarado, ngunit mayroon kang ilang mga mekanismo upang masira ang link na iyon. nohup y disown Sakop nila ang karamihan sa mga pang-araw-araw na gamit, at mga multiplexer tulad ng tmux o screen Mas lalo pa silang gumagawa ng mga paulit-ulit na sesyon. Dagdag pa rito ang pagkontrol sa trabaho (Ctrl+Z, bg, fg) at pamamahala ng pagination, tulad ng lessMapapanatili mong maayos ang pagtakbo ng iyong mga command at application kahit na isara mo ang terminal, mag-log off, o mawala ang iyong koneksyon sa SSH.
Masigasig na manunulat tungkol sa mundo ng mga byte at teknolohiya sa pangkalahatan. Gustung-gusto kong ibahagi ang aking kaalaman sa pamamagitan ng pagsusulat, at iyon ang gagawin ko sa blog na ito, ipakita sa iyo ang lahat ng mga pinaka-kagiliw-giliw na bagay tungkol sa mga gadget, software, hardware, teknolohikal na uso, at higit pa. Ang layunin ko ay tulungan kang mag-navigate sa digital na mundo sa simple at nakakaaliw na paraan.