Killall en subprocessen

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • ernstoud
  • Registratie: Januari 2015
  • Laatst online: 04:20
Ik start in Linux vanuit een bash shell een script waarin ook een aantal processen in achtergrond (met & dus) gestart worden.

Als ik nu met killall dat shell script stop, stoppen dan ook de daarin gestarte processen?

RIPE Atlas probe: 1005104

Beste antwoord (via ernstoud op 25-09-2023 12:06)


  • Oon
  • Registratie: Juni 2019
  • Niet online

Oon

Killall roept het kill commando aan op de processen die hij vindt, en die doet dat niet standaard, maar wel wanneer je een negatief proces ID (dus procesgroep ID) meegeeft en alle child processes correct dezelfde procesgroep ID hebben gekregen.
If pid is negative, but not -1, sig shall be sent to all processes (excluding an unspecified set of system processes) whose process group ID is equal to the absolute value of pid, and for which the process has permission to send a signal.
Je zult dus expliciet met setpgid of een andere interne functie de groep ID gezet moeten hebben, anders gebeurt het niet.

Alle reacties


Acties:
  • +1 Henk 'm!

  • GarBaGe
  • Registratie: December 1999
  • Laatst online: 10:16
Ik weet het niet zeker, maar ik gok op "nee".
Immers, met & starten deze processen losgekoppeld van het hoofdproces.
Maar "killall" killt processen op basis van naam.
Dus als deze processen dezelfde naam hebben, dan gaan ze wel mee :)

Ryzen9 5900X; 16GB DDR4-3200 ; RTX-4080S ; 7TB SSD


Acties:
  • Beste antwoord
  • +1 Henk 'm!

  • Oon
  • Registratie: Juni 2019
  • Niet online

Oon

Killall roept het kill commando aan op de processen die hij vindt, en die doet dat niet standaard, maar wel wanneer je een negatief proces ID (dus procesgroep ID) meegeeft en alle child processes correct dezelfde procesgroep ID hebben gekregen.
If pid is negative, but not -1, sig shall be sent to all processes (excluding an unspecified set of system processes) whose process group ID is equal to the absolute value of pid, and for which the process has permission to send a signal.
Je zult dus expliciet met setpgid of een andere interne functie de groep ID gezet moeten hebben, anders gebeurt het niet.

Acties:
  • 0 Henk 'm!

  • ernstoud
  • Registratie: Januari 2015
  • Laatst online: 04:20
GarBaGe schreef op maandag 25 september 2023 @ 11:51:
Ik weet het niet zeker, maar ik gok op "nee".
Immers, met & starten deze processen losgekoppeld van het hoofdproces.
Maar "killall" killt processen op basis van naam.
Dus als deze processen dezelfde naam hebben, dan gaan ze wel mee :)
Ik denk ook zoiets. Ik ervaar nl. af en toe een crash kort na die killall, ik vermoed dat een gestart proces in de problemen komt omdat het killen van het hoofdproces bestanden sluit. Ik kan ook niets in de logs vinden over de oorzaak van de crash omdat de logs na de crash opnieuw opgebouwd worden, betreft een router met weinig lokale storage.

Het betreffende script zorgt er voor dat als het iptables logfile te groot wordt voor het beperkte geheugen van de router het loggen (logread -f) stopt, het logfile veilig gesteld wordt, er een leeg logfile gemaakt wordt en logread weer gestart wordt.

Als logread blijft draaien terwijl “onder water” het logfile verwijderd wordt, kan ik me een segfault wel voorstellen… en de watchdog in de router zal de router dan rebooten.

Gek genoeg kan ik nergens er iets over vinden.

Zal er voor moeten zorgen dat de “subprocessen” zoals logread ook gekilld worden.

RIPE Atlas probe: 1005104


Acties:
  • +1 Henk 'm!

  • hcQd
  • Registratie: September 2009
  • Laatst online: 08:28
Killall heeft een -g (of --process-group) daarvoor.