döda (kommandera)

döda
Originalförfattare AT&T Bell Laboratories
Utvecklare Olika öppen källkod och kommersiella utvecklare
Initial release februari 1973 ; 50 år sedan ( 1973-02 )
Operativ system Unix , Unix-like , Plan 9 , Inferno , OS-9 , Windows , ReactOS , Singularity , IBM i
Plattform Cross-plattform
Typ Kommando
Licens ReactOS: LGPL-2.1 eller senare

Inom datorer är kill ett kommando som används i flera populära operativsystem för att skicka signaler till pågående processer .

Genomföranden

Unix och Unix-liknande

I Unix och Unix-liknande operativsystem är kill ett kommando som används för att skicka en signal till en process. Som standard är meddelandet som skickas avslutningssignalen , som begär att processen avslutas . Men döda är något av en felaktig benämning; signalen som skickas kanske inte har något med processdöd att göra. Kill - kommandot är ett omslag runt kill() -systemanropet , som skickar signaler till processer eller processgrupper på systemet, refererade till deras numeriska process-ID (PID) eller processgrupp- ID (PGID). kill tillhandahålls alltid som ett fristående verktyg enligt definitionen av POSIX -standarden. De flesta skal har dock inbyggda kill - kommandon som kan skilja sig något från det.

Det finns många olika signaler som kan skickas (se signal för en fullständig lista), även om de signaler som användare generellt är mest intresserade av är SIGTERM ("terminate") och SIGKILL ("kill"). Standardsignalen som skickas är SIGTERM. Program som hanterar denna signal kan göra användbara rensningsoperationer (som att spara konfigurationsinformation till en fil) innan de avslutar. Men många program implementerar inte en speciell hanterare för denna signal, och därför anropas istället en standardsignalhanterare. Andra gånger har även en process som har en speciell hanterare gått snett på ett sätt som hindrar den från att korrekt hantera signalen.

Alla signaler förutom SIGKILL och SIGSTOP ("stopp") kan "avlyssnas" av processen, vilket innebär att en speciell funktion kan anropas när programmet tar emot dessa signaler. De två undantagen SIGKILL och SIGSTOP ses endast av värdsystemets kärna , vilket ger tillförlitliga sätt att kontrollera exekveringen av processer. SIGKILL dödar processen och SIGSTOP pausar den tills en SIGCONT ("fortsätt") tas emot.

Unix tillhandahåller säkerhetsmekanismer för att förhindra obehöriga användare från att döda andra processer. För att en process ska kunna skicka en signal till en annan måste ägaren av signaleringsprocessen vara densamma som ägaren till den mottagande processen eller vara superanvändare .

De tillgängliga signalerna har alla olika namn och är mappade till vissa nummer. Det är viktigt att notera att den specifika mappningen mellan siffror och signaler kan variera mellan Unix-implementeringar. SIGTERM numreras ofta 15 medan SIGKILL ofta numreras 9.

Exempel

En process kan skickas en SIGTERM- signal på fyra sätt (process-ID är '1234' i detta fall):

 


 döda  1234  döda  -s TERM  1234  döda  -TERM  1234  döda  -15  1234 

Processen kan skickas en SIGKILL- signal på tre sätt:



 döda  -s DÖDA  1234  döda  -KILLA  1234  döda  -9  1234 

Andra användbara signaler inkluderar HUP, TRAP, INT, SEGV och ALRM. HUP skickar SIGHUP- signalen. Vissa demoner, inklusive Apache och Sendmail , läser om konfigurationsfilerna när de tar emot SIGHUP, så kommandot kill kan användas för detta också. En SIGINT- signal kan genereras mycket enkelt genom att trycka på CTRL + C i de flesta Unix-skal . Det är också vanligt att CTRL + Z mappas till SIGTSTP ("terminal stop") och att CTRL + \ (omvänt snedstreck) mappas till SIGQUIT , vilket kan tvinga ett program att göra en kärndumpning .

Relaterade program

  • killall - på vissa varianter av Unix, som Solaris , anropas detta verktyg automatiskt när systemet går igenom en avstängning . Det beter sig ungefär som kill-kommandot ovan, men istället för att skicka en signal till en enskild process skickas signalen till alla processer i systemet. Men på andra som IRIX , Linux och FreeBSD , tillhandahålls ett argument som anger namnet på processen (eller processerna) som ska dödas. För att till exempel döda en process som en instans av XMMS- musikspelaren som anropas av xmms , skulle användaren köra kommandot killall xmms . Detta skulle döda alla processer som heter xmms , och motsvarar att döda `pidof xmms` på system som Solaris.
  • pkill - signalerar processer baserade på namn och andra attribut. Det introducerades i Solaris 7 och har sedan dess återimplementerats för Linux, NetBSD och OpenBSD . pkill gör avlivningsprocesser baserade på deras namn mycket bekvämare: t.ex. för att döda en process som heter firefox utan pkill (och utan pgrep ), skulle man behöva skriva kill `ps --no-headers -C firefox -o pid` medan med pkill , man kan helt enkelt skriva pkill firefox .
  • xkill - om den anropas utan några parametrar ändras muspekaren från en pil till en "x"-ikon, och användaren kan klicka på ett fönster för att tvinga X-servern att stänga anslutningen med klienten som äger fönstret. Detta gör ofta att processen avslutas när den upptäcker att dess anslutning till X-servern har stängts.

Microware OS-9

Kill - kommandot är också tillgängligt som ett skal inbyggt i OS-9- skalet. Den används för att döda en annan process med process-ID.

Exempel

Stoppa processen med process-ID "7":

$ döda 7

Microsoft Windows och ReactOS

Taskkill - kommandot på Microsoft Windows

I Microsofts kommandoradstolk Windows PowerShell är kill ett fördefinierat kommandoalias för Stop-Process cmdlet .

Microsoft Windows XP , Vista och 7 inkluderar kommandot taskkill för att avsluta processer. Den vanliga syntaxen för detta kommando är taskkill /im "IMAGENAME" . En "ej stödd" version av kill inkluderades i flera versioner av Microsoft Windows Resource Kits tillgängliga för Windows 98.

GNU- versioner av kill har porterats via Cygwin och körts inuti Unix-miljöundersystemet som Microsoft Windows Services för UNIX tillhandahåller (Microsoft köpte Windows Services för Unix i grossistförsäljning genom deras köp av Softway Systems och deras Interix -produkt den 17 september 1999).

Taskkill - kommandot på ReactOS

ReactOS - implementeringen är baserad på Windows-varianten. Det utvecklades av Andrew Riedi, Andrew Nguyen och He Yang. Den är licensierad under LGPLv2.1 eller senare.

Exempel

Hitta alla processer som börjar med bokstaven "p" som utvecklades av Microsoft och använder mer än 10 MB minne och döda dem:

            





 PS C:\>  ps  p  *  |  där  {  $_  .  Företagsliknande  "  Microsoft*"  -och  $_  .  WorkingSet  -gt  10MB  }  |  kill  -confirm  Bekräfta  Är du säker på att du vill utföra den här åtgärden?  Utför operation "Stop-Process" på Target "powershell (6832)".  [Y] Ja [A] Ja till alla [N] Nej [L] Nej till alla [S] Suspend [?] Hjälp (standard är "Y"): A PS C:\  > 

Här är ett enklare exempel, som ber processen Explorer.exe att avslutas:

   PS C:\>  taskkill  /  im  explorer  .  ex 

Detta exempel tvingar processen att avslutas:

    PS C:\>  taskkill  /  f  /  im  explorer  .  ex 

Processer kan också dödas av deras PID-nummer :

   PS C:\>  taskkill  /  pid  3476 

Microsoft Singularity

Singularity shell , standardskalet för Microsoft Researchs mikrokärnoperativsystem Singularity inkluderar ett kill- kommando för att avsluta bakgrundsprocesser.

Exempel

Stoppa processen med namnet "SampleProcess":

Singularity>kill SampleProcess

Stoppa processen med processidentifieraren "42":

Singularitet>döda 42

Plan 9 från Bell Labs

Enligt plan 9 från Bell Labs utför inte dödningsprogrammet denna avslutning, och det tar inte heller process-ID:n. Snarare tar det de faktiska namnen på processer och matar ut kommandona för rc , skalet som används av Plan 9 , för att döda processen.

Ett liknande kommando som tillhandahålls kallas slay , som gör samma sak men för processer som vägrar att dödas på detta sätt.

Exempel

Till exempel, för att döda alla instanser av troff , skriver man:

döda troff | rc

Andra

Kill - kommandot har också porterats till operativsystemet IBM i .

Se även

Vidare läsning

externa länkar