Avatar billede loproc Praktikant
16. januar 2006 - 14:27 Der er 27 kommentarer

At dræbe de gamle

Hejsa

Jeg sidder med et lidt irriterende problem. Jeg skal bruge et eller andet der enten kan begrænse hvor længe en process må køre, eller noget der kan dræbe processer med [navn] som har kørt længere end [tid] (en killall der er begrænset til at dræbe processer der er ældre end [tid])

Den første løsning er nok den pæneste, men kan ikke finde noget til det :o(

Håber der er nogle der har nogle tips,
Martin Kruse Jensen
Avatar billede zypher212 Nybegynder
16. januar 2006 - 14:32 #1
For at dræbe en proces kan du skrive, taskkill /f /im procesnavn.exe :)
Avatar billede zypher212 Nybegynder
16. januar 2006 - 14:33 #2
Og nu så jeg lige hvilket forum du postede under... :) Sorry..

pkill procesnavn :) Men tror at du kender den
Avatar billede zypher212 Nybegynder
16. januar 2006 - 14:36 #3
Hvorfor skal du bruge en sådan funktion? Jeg er sikker på at det er rimeligt nemt at scripte det (vel at mærke funktion 2). Hvor kendt er du i Linux miljøet?
Avatar billede loproc Praktikant
16. januar 2006 - 14:36 #4
På pkill kan man jo ikke specificere hvor gammel processen minimum skal være...
Avatar billede loproc Praktikant
16. januar 2006 - 14:37 #5
Jeg vil da mene jeg er nogenlunde ok i *nix. Har da skrevet små shell scripts osv.
Avatar billede zypher212 Nybegynder
16. januar 2006 - 14:41 #6
Okay. Det her kan ikke komme bag på dig, du skal læse MAN sider :) kender du top?
Tror nok at den kan vise dig hvor gammel en proces er. :) Og der er en funktion i top der gør at den afslutter øjeblikkeligt. Men starter lige min egen linux boks.. :)
Avatar billede zypher212 Nybegynder
16. januar 2006 - 14:52 #7
Okay.. Jeg har fundet ud af dette:
top -n 1 |grep procesnavn |cut -c 56-64 returnerer tiden den har kørt i. Man må så rimeligt nemt kunne finde ud af resten via et shell script. Dog er der lige nogle problemer med scriptet mht top. Tror jeg ;)
Avatar billede zypher212 Nybegynder
16. januar 2006 - 14:57 #8
Og her er løsningen på mit "top" problem :) top skal startes sådan: "top -b -n 1" -b får den til at returnere alle processor, og -n får den til at køre 1 gang.
Avatar billede zypher212 Nybegynder
16. januar 2006 - 15:24 #9
Så må en anden finde en løsning på at sammenligne en tid med denne tid. :) Hvis du ikke får et tal ud, så eksperimenter med cut -c aa-bb, aa er det antal inde i strengen den starter med at returnere tal, og bb er det inde i strengen den stopper. :)
Avatar billede zypher212 Nybegynder
16. januar 2006 - 16:00 #10
Jeg lavede dette lille script:

## Procesnavn
#!/bin/bash

##Program tid:
MIN=16
HOUR=00

PTIMEA=`top -b -n 1 |grep firefox |cut -c 59-60`

if [ "$PTIMEA" -gt "$MIN" ] ; then
    ##pkill proces-navn
    echo "hej hej"
else
    echo "nej den gik ikke"
fi

echo $PTIMEA

Det tjekker om firefox er ældre end 16 minutter, men tjekker IKKE for om der kører flere firefox'er eller om hvor mange timer firefox har kørt. :) På samme måde som jeg tjekker på minutter kan man tjekke på timer. :) Håber at det har hjulpet dig lidt på vej. Og jeg er selv ret ny til scripting så er der en fejl så skriv endelig :)
Avatar billede janpo Nybegynder
16. januar 2006 - 16:19 #11
Eller start din proces med ulimit -t (sekunder CPU tid).
Avatar billede zypher212 Nybegynder
16. januar 2006 - 16:42 #12
Hmm... Hvordan får man sin proces til at stoppe efter fx 5 sekunder?
Avatar billede zypher212 Nybegynder
16. januar 2006 - 16:43 #13
Jeg mener ikke efter 5 sekunders CPU-tid. Men efter at der er GÅET 5 sekunder efter den er startet.
Avatar billede zypher212 Nybegynder
16. januar 2006 - 16:57 #14
Okay. For at dræbe en process efter eks 10 minutter kan dette scrip bruges (Det er lidt mere simpelt end det andet, samt det andet bruger også til min gru CPU-tid :S):
#!/bin/bash
procesnavn
sleep 600 &
pkill proces
Avatar billede zypher212 Nybegynder
18. januar 2006 - 09:05 #15
Fik du noget du kunne bruge?
Avatar billede loproc Praktikant
18. januar 2006 - 09:11 #16
Både ja og nej. Svarene er fyldestgørende, men der er lige en detalje jeg glemte at nævne. Jeg kan nemlig ikke sende jobbet "til baggrunden" da jeg skal bruge outputtet. Hvis jeg havde husket det, så ville zypher212's svar være kanon. Så hvis du lige opretter et svar zypher, så får du point...
Avatar billede zypher212 Nybegynder
18. januar 2006 - 09:17 #17
Det er der også en løsning på :) Lav to scripts;

script1:
#!/bin/bash
sh script2 &
procesnavn


scrip2:
#!/bin/bash
sleep 600
pkill procesnavn

På den måde er det ikke sendt til baggrunden men det er så en anelse mere rodet :)
Avatar billede loproc Praktikant
18. januar 2006 - 09:19 #18
Jo, men hvordan finder jeg PID'et fra den?
Avatar billede zypher212 Nybegynder
18. januar 2006 - 09:46 #19
med:
ps -e |grep procesnavn| cut -c 0-6

Kan der være flere end en?? Hvis der er kræver det lidt modifikation :)
Avatar billede loproc Praktikant
18. januar 2006 - 09:47 #20
Der kan være rigtig mange ;)
Avatar billede zypher212 Nybegynder
18. januar 2006 - 10:58 #21
Okay, har fundet denne måde, men den er hverken pæn eller sikker... :) Desuden er det nødvendigt at PID bliver registreret af ps i den rækkefølge de er startet, dvs den yngste nederst.
Avatar billede zypher212 Nybegynder
18. januar 2006 - 11:01 #22
Code:
ps -e |grep procesnavn |cut -c 0-5 > midlertidigfil && PID=`tail -n 1 midlertidigfil && echo $PID && rm midlertidigfil

$PID indeholder så PID'en på den sidst startede proces. Håber at det hjalp lidt :)

PS trykkede lige "Send" for hurtigt... :)
Avatar billede zypher212 Nybegynder
18. januar 2006 - 11:16 #23
Jeg har testet koden ved at starte en masse aterm'er og puttet kill $PID bag i koden.
Den dræber dem i modsat rækkefølge af hvordan de er startet, så det virker da nogenlunde :) Skriv endelig hvis der er problemer.. .:)
Avatar billede zypher212 Nybegynder
19. januar 2006 - 15:02 #24
Hvad så..?? Har du prøvet det? Er der stadig noget du ikke er helt tilfreds med?
Avatar billede zypher212 Nybegynder
26. januar 2006 - 14:29 #25
Hmm vil du ikke få lukket her engang? Egentligt lidt trist at hjælpe uden at få feedback. Men det må du om, slut på support herfra... :S
Avatar billede loproc Praktikant
13. november 2006 - 10:25 #26
Heysa igen - Tror det her spørgsmål har været offer for et skift af E-mail adresse, så derfor jeg ikke har reageret. Det må du undskylde zypher212, men den løsning har sandsynligvis virket, så opret lige et svar, så får du point
Avatar billede zypher212 Nybegynder
13. november 2006 - 13:08 #27
Må indrømme at det var nysgerrigheden for om det virkede mere end de points der drev det... Anyway, så har jeg fundet ud af nu, at det ikke virker. PID værdierne er starter tilfældigt hvorfor dette nummer ikke ville virke.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester