introduktion
en Linux-server, som alla andra datorer du kanske känner till, Kör program. Till datorn anses dessa ”processer”.
medan Linux hanterar hanteringen på låg nivå, bakom kulisserna i en processs livscykel, behöver du ett sätt att interagera med operativsystemet för att hantera det från en högre nivå.
i den här guiden kommer vi att diskutera några enkla aspekter av processhantering. Linux ger en riklig samling verktyg för detta ändamål.,
Vi kommer att utforska dessa idéer på en Ubuntu 12.04 VPS, men alla moderna Linux-distribution kommer att fungera på ett liknande sätt.
så här visar du processer som körs i Linux
topp
det enklaste sättet att ta reda på vilka processer som körs på din server är att köra kommandottop
:
top
den övre delen av informationen ger systemstatistik, såsom systembelastning och det totala antalet uppgifter.
Du kan enkelt se att det finns 1 pågående process, och 55 processer sover (aka idle/inte använder CPU-resurser).,
den nedre delen har processer som körs och deras användningsstatistik.
htop
en förbättrad version avtop
, som heterhtop
, finns i förvaret. Installera det med det här kommandot:
sudo apt-get install htop
om vi kör kommandothtop
ser vi att det finns en mer användarvänlig skärm:
htop
Du kan lära dig mer om hur du använder top och htop här.,
hur man använder ps för att lista processer
bådetop
ochhtop
ger ett trevligt gränssnitt för att visa körprocesser som liknar en grafisk uppgiftshanterare.
dessa verktyg är dock inte alltid tillräckligt flexibla för att på ett adekvat sätt täcka alla scenarier. Ett kraftfullt kommando som heter ps
är ofta svaret på dessa problem.,
När det anropas utan argument kan utmatningen vara lite bristfällig:
ps
PID TTY TIME CMD 1017 pts/0 00:00:00 bash 1262 pts/0 00:00:00 ps
denna utmatning visar alla processer som är associerade med den aktuella användaren och terminalsessionen. Detta är vettigt eftersom vi bara körbash
ochps
med den här terminalen för närvarande.,
för att få en mer fullständig bild av processerna i detta system kan vi köra följande:
ps aux
dessa alternativ säger ps
att visa processer som ägs av alla användare (oavsett deras terminal association) i ett användarvänligt format.
för att se en trädvy, där hierarkiska relationer illustreras, kan vi köra kommandot med följande alternativ:
ps axjf
som du kan se visas processenkthreadd
som FÖRÄLDER tillksoftirqd/0
processen och de andra.,
en anteckning om Process-ID
i Linux och Unix-liknande system tilldelas varje process ett process-ID eller PID. Så här identifierar och håller operativsystemet koll på processer.
ett snabbt sätt att få PID för en process är med kommandotpgrep
:
pgrep bash
1017
detta kommer helt enkelt att fråga process-ID och returnera det.
den första processen som skapades vid uppstart, kallad init, ges PID av ”1”.,
pgrep init
1
den här processen är sedan ansvarig för att gyta alla andra processer på systemet. De senare processerna ges större PID-nummer.
en process förälder är den process som var ansvarig för lek. Överordnade processer har en PPID, som du kan se i kolumnrubrikerna i många processhanteringsprogram, inklusive top
, htop
och ps
.,
all kommunikation mellan användaren och operativsystemet om processer innebär att översätta mellan processnamn och Pid någon gång under operationen. Det är därför verktyg berätta PID.
relationer mellan föräldrar och Barn
att skapa en underordnad process sker i två steg: fork(), som skapar nytt adressutrymme och kopierar de resurser som ägs av föräldern via copy-on-write för att vara tillgängliga för underordnad process; och exec(), som laddar en körbar i adressutrymmet och utför den.,
om en barnprocess dör före sin förälder blir barnet en zombie tills föräldern har samlat in information om den eller indikerat till kärnan att den inte behöver den informationen. Resurserna från barnprocessen kommer då att befrias. Om förälderprocessen dör före barnet, kommer barnet dock att antas av init, även om det också kan omplaceras till en annan process.
hur man skickar processer signaler i Linux
alla processer i Linux svarar på signaler. Signaler är ett os-nivå sätt att berätta program för att avsluta eller ändra deras beteende.,
hur man skickar processer signaler från PID
det vanligaste sättet att överföra signaler till ett program är med kommandotkill
.
som du kan förvänta dig är standardfunktionen för det här verktyget att försöka döda en process:
<pre>
döda <span class=”highlight”>PIDoftarget_process</span>
</pre>
detta skickar terminssignalen till processen., Termen signalen berättar processen att avsluta. Detta gör det möjligt för programmet att utföra sanering och avsluta smidigt.,
Om programmet missköter sig och inte avslutar när det ges terminssignalen, kan vi eskalera signalen genom att skicka KILL
signal:
<pre>
kill-KILL <span class=”markera”>pidoftarget_process</span>
</pre>
det här är en speciell signal som inte skickas till program.,
istället ges den till operativsystemkärnan, som stänger av processen. Detta används för att kringgå program som ignorerar signalerna som skickas till dem.
varje signal har ett associerat nummer som kan skickas istället för namnet. Till exempel kan du skicka ”-15” istället för ”-TERM” och ”-9” istället för ”-KILL”.
hur man använder signaler för andra ändamål
signaler används inte bara för att stänga av program. De kan också användas för att utföra andra åtgärder.
till exempel kommer många demoner att starta om när de får HUP
eller hang-up-signalen., Apache är ett program som fungerar så här.
<pre>
sudo kill-HUP<span class=”highlight”>pidofapache</span>
</pre>
ovanstående kommando kommer att orsaka apache att ladda om konfigurationsfilen och återuppta serveringsinnehåll.,
Du kan lista alla signaler som är möjliga att skicka med kill genom att skriva:
kill -l
hur man skickar Processsignaler med namn
även om det konventionella sättet att skicka signaler är genom användning av PIDs, finns det också metoder för att göra detta med vanliga processnamn.,
kommandot pkill
fungerar på nästan exakt samma sätt som kill
, men det fungerar på ett processnamn istället:
pkill -9 ping
ovanstående kommando motsvarar:
kill -9 `pgrep ping`
om du vill skicka ett meddelande till iv id=”signal till varje instans av en viss process kan du använda kommandotkillall
:
killall firefox
ovanstående kommando skickar termsignalen till varje instans av Firefox som körs på datorn.,
hur man justerar Processprioriteringar
ofta vill du justera vilka processer som prioriteras i en servermiljö.
vissa processer kan betraktas som missionskritiska för din situation, medan andra kan utföras när det kan finnas kvarvarande resurser.
Linux styr prioritet genom ett värde som heter niceness.
högprioriterade uppgifter anses vara mindre trevliga, eftersom de inte delar resurser också. Lågprioriterade processer är å andra sidan trevliga eftersom de insisterar på att bara ta minimala resurser.,
När vi kördetop
I början av artikeln fanns en kolumn märkt ”NI”. Det här är processens trevliga värde:
top
fina värden kan variera mellan ”-19/-20” (högsta prioritet) och ”19/20” (LÄGSTA prioritet) beroende på systemet.,
To run a program with a certain nice value, we can use the nice
command:
<pre>
nice -n 15 <span class=”highlight”>commandtoexecute</span>
</pre>
This only works when beginning a new program.,=”9b4b74b24a”>:
<pre>
renice 0 <span class=”highlight”>PIDtoprioritize</span>
</pre>
Obs: medan Nice fungerar med ett kommandonamn av nödvändighet, renice fungerar genom att ringa processen PID
slutsats
processhantering är ett ämne som är en ibland svårt för nya användare att förstå eftersom de verktyg som används skiljer sig från sina grafiska motsvarigheter.,
idéerna är dock bekanta och intuitiva, och med lite övning blir de naturliga. Eftersom processer är inblandade i allt du gör med ett datorsystem, lära sig att effektivt kontrollera dem är en viktig färdighet.
<div class=”author”>av Justin Ellingwood< / div>
Leave a Reply