Toon posts:

[Linux] Zombie proces na aanroepen perl script

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een formmail perl script. Als ik dat in de browser aanroep dan werkt het perfect. Het enige is dat ik op mijn server een zombie proces overhou van dat script. Is dit normaal? Ik las dat je het parent proces moet herstarten wil je ze verwijderen. Dit klopt wel, want dit gebeurd als ik apache herstart.

Worden deze zombies niet automatisch (na een time-out) verwijderd?
Bedankt voor elke uitleg.

  • _Squatt_
  • Registratie: Oktober 2000
  • Niet online
Zombie processen worden opgeruimd als je wait() aanroept (zie manpage voor een betere uitleg).

In je script wordt dit blijkbaar niet gedaan, als je script dan eindigt valt de zombie onder het parent proces van je script. Als je die parent stopt valt de zombie onder de parent daarvan, etc. Totdat de zombie onder init (proces 1) valt, die ruimt sowieso zombies op.

Je script moet dus iets aangepast moet worden. Het moet ook met wait() wachten tot de childs klaar zijn. (denk ik :))

"He took a duck in the face at two hundred and fifty knots."


Verwijderd

Topicstarter
Maar moet ik me hier nu zorgen om maken met betrekking tot de serverload?

  • Sendy
  • Registratie: September 2001
  • Niet online
Nee, zombies zijn alleen entries in de procestabel. Het proces zelf is al weg, alleen de entry dus niet. Je load zal niet stijgen; alleen als je veel (heel veel) zombies hebt kan je uit je procestabel lopen (een pid wordt niet opnieuw uitgedeeld zolang er een proces is met dat nummer -- ruim je ze niet op, dan kan dat een probleem worden)

Ik denk zelf dat je er niet bijzonder veel last van hebt; als ik het goed heb worden apache processen na een tijdje 'verschoond', en dan zouden je zombies ook weer moeten verdwijnen. Netter is het, zoals _Squatt_ zegt, om te zorgen dat er geen zombies achterblijven.

Verwijderd

Topicstarter
Jep ben ik mee eens, maar ik zou niet weten hoe ik in een perl script dat script netjes kan laten eindigen. Het script werkt als een trein en zou goed moeten zijn lijkt me.

  • Koffie
  • Registratie: Augustus 2000
  • Laatst online: 19:19

Koffie

Koffiebierbrouwer

Braaimeneer

Move PNS > NOS

Tijd voor een nieuwe sig..


  • RvdH
  • Registratie: Juni 1999
  • Laatst online: 19-02 14:54

RvdH

Uitvinder van RickRAID

Verwijderd schreef op 27 mei 2004 @ 14:13:
Jep ben ik mee eens, maar ik zou niet weten hoe ik in een perl script dat script netjes kan laten eindigen. Het script werkt als een trein en zou goed moeten zijn lijkt me.
Plaats dat script eens dan. Als ie childs achterlaat is het geen goed script.

  • _Squatt_
  • Registratie: Oktober 2000
  • Niet online
Verwijderd schreef op 27 mei 2004 @ 14:13:
Jep ben ik mee eens, maar ik zou niet weten hoe ik in een perl script dat script netjes kan laten eindigen. Het script werkt als een trein en zou goed moeten zijn lijkt me.
If you say
Perl:
1
2
3
4
5
use POSIX ":sys_wait_h";
#...
do {
    $kid = waitpid(-1, WNOHANG);
} until $kid > 0;
then you can do a non-blocking wait for all pending zombie processes.
Of als je automatisch zombies wilt reapen:
On most Unix platforms, the CHLD (sometimes also known as CLD) signal has special behavior with respect to a value of 'IGNORE'. Setting $SIG{CHLD} to 'IGNORE' on such a platform has the effect of not creating zombie processes when the parent process fails to wait() on its child processes (i.e. child processes are automatically reaped).
oftewel het volgende ergens in je script:
Perl:
1
$SIG{CHLD} = 'IGNORE'

eerste optie lijkt mij wat netter, maar 2e moet op Linux ook gewoon werken.

-- edit
Nog een link met goede uitleg: Recipe 16.19. Avoiding Zombie Processes

[ Voor 10% gewijzigd door _Squatt_ op 27-05-2004 15:17 ]

"He took a duck in the face at two hundred and fifty knots."

Pagina: 1