Finns det en kraftigare form av tvångsavsluta?

Tråden skapades och har fått 15 svar. Det senaste inlägget skrevs .
1

Jag har ett program som heter Elgato EyeTV Digital TV Recorder 1.8.6, som kraschar lite då och då, det verkar som om det är beroende av att ha tillräckligt med processorcykler eller något och "störs" lätt av andra program som startar eller behöver disken en stund.

Nåväl trycker jag Alt + Kommando + Esc så kan jag tvångsavsluta EyeTV, trycker jag samma sak igen så kan jag göra det igen och igen och igen. Det blir inte avslutat. Jag kan dock logga ut och in igen, oftast i kombination med en varning/fråga om att EyeTV avbryter utloggning och vill jag tvångsavsluta det. Men det tar för lång tid och är irriterande.

Så finns det något terminalkommando eller liknande som verkligen verkligen avlivar ett program som är "kraftigare" än tvångsavsluta?

Du kan använda kommandot killall. T ex killall -9 TextEdit.

Eller först skriva top. Titta vilket process ID Elgato har och sedan skriva sudo kill -9 IDnummer.
För det kan vara svårt att exakt skriva vad processen heter. Men båda fungerar likadant.

För Quakefolk så är -9 = BFG.

Tack för tipsen Marcus K och Mattias, skall prova nästa gång det händer.

  • Medlem
  • 2007-07-14 18:14

Man kan kolla efter alla processer i verktygsprogrammet Aktivitetskontroll för att få veta vilka processer det rör sig om. Där kan man också döda valfria processer.

  • Medlem
  • Vänersborg
  • 2007-07-14 18:21

Vad är det för fel på den vanliga aktivitetskontroll.app?
Dödar ju allt tillomed processer.
Just som baronen sa.

Baronen och Tjarven: Glömde att berätta att det har jag provat. Har även provat att utgå från processen EyeTV i Aktivitetskontroll, skaffat info om överliggande process och försökt döda den, det går inte det heller. Men tack i alla fall, det ni beskriver brukar fungera men inte just i det här fallet.

ps -aux i terminalen och kill PID-nummer

Ursprungligen av rikard.agren:

ps -aux i terminalen och kill PID-nummer

Jag är ganska säker på att bara kill pid är helt ekvivelent med det som görs med en vanlig force quit.

kill -9 är något brutalare, det säger helt enkelt till schedulern att bara släppa processen

Edit: Hmm, det gjorde den visst inte, finns tydligen ingen scheduler i BSD-baserade operativsystem. Det den gör är att tvinga processen att kalla på exit()

Senast redigerat 2007-07-14 21:40
  • Medlem
  • Uppsala
  • 2007-07-16 06:22
Ursprungligen av DrRotmos:

kill -9 är något brutalare, det säger helt enkelt till schedulern att bara släppa processen

Edit: Hmm, det gjorde den visst inte, finns tydligen ingen scheduler i BSD-baserade operativsystem. Det den gör är att tvinga processen att kalla på exit()

Scheluder finns det väl alltid?¿

Men SIGKILL, alltså nr 9 innebär väl att processen inte får mer CPU-tid och att all dess minne deallokeras. Under vissa mycket speciella fall så kan systemet inte göra det, utan processen måste stå kvar i processtabellen tills något visst har skett. Då får den ingen mer CPU-tid, men dess minne finns kvar tills det kan frigöras (millisekunder senare).

Så som jag förstått i varje fall.

Kan det inte vara så enkelt som att det ligger en överordnad process som återstartar EyeTV när den kraschat? Är det verkligen samma process, d.v.s. med samma process-ID, när du gjort en kill -9 på den? Har den bytt process-ID så har något upptäckt att processen kraschat och startat upp en ny.

Ursprungligen av lobStar:

Scheluder finns det väl alltid?¿

Men SIGKILL, alltså nr 9 innebär väl att processen inte får mer CPU-tid och att all dess minne deallokeras. Under vissa mycket speciella fall så kan systemet inte göra det, utan processen måste stå kvar i processtabellen tills något visst har skett. Då får den ingen mer CPU-tid, men dess minne finns kvar tills det kan frigöras (millisekunder senare).

Så som jag förstått i varje fall.

Deallokering, stänga file handles osv. görs ur processens context, vilket gör att den visst får mer CPU-tid.

Men rätta mig om jag har fel, betyder inte parenteser i ps att det är en zombie-process? Isåfall kan du inte döda den mer

Ursprungligen av DrRotmos:

Men rätta mig om jag har fel, betyder inte parenteser i ps att det är en zombie-process? Isåfall kan du inte döda den mer

Är inte det vad flaggan "Z" indikerar? Däremot är ju nånting skumt här i och med att processen är markerad med "E", som markerar att processen försöker avsluta sig själv.

  • Medlem
  • Uppsala
  • 2007-07-16 13:06
Ursprungligen av DrRotmos:

Men rätta mig om jag har fel, betyder inte parenteser i ps att det är en zombie-process? Isåfall kan du inte döda den mer

Det betyder ju att det är dess förälder som inte tar sitt ansvar och avslutar jobbet. Om man dödar dess förälder så förs den väl över till launchd som tar hand om det?

Kan berätta att inget av dessa kommandon fungerar:

kill 2821
killall -9 EyeTV
killall -9 (EyeTV)
killall -9 EyeTV Helper

Eller samma kommandon med sudo framför. Diverse felmeddelanden eller inga meddelanden alls. Kör man efteråt kommandot ps -aux igen så har inget hänt

Ola 2821 0.0 0.0 0 0 ?? E 7:55PM 0:00.00 (EyeTV)

Tips?

Förresten, kommandot top visar inte processen då den har kraschat och inte drar några processorcykler. Vet inte hur man bläddrar bland procsserna för att se flera.

  • Medlem
  • Uppsala
  • 2007-07-16 06:17

Det finns vissa fall när en process inte kan avsluta ens med SIGKILL. Jag tror det är när den ligger och väntar på en nätverksanslutning på ett visst sätt. Men det är nog mest intressant i teorin vad jag förstått.

1
Bevaka tråden