6
votes

Lorsqu'un processus est tué, ce sont ces informations enregistrées n'importe où?

Question:
  • Lorsqu'un processus est tué, ces informations sont-elles enregistrées n'importe où (c'est-à-dire dans le noyau), telles que Syslog (ou peuvent être configurées pour être enregistrées SysLog.conf)
  • est l'information du pid, du temps et de la date du tueur lorsqu'il est tué et raison

    update - vous me donnez une idée, merci beaucoup |


2 commentaires

Cela pourrait être mieux demandé sur SuperUserer, si vous êtes surtout curieux des solutions existantes.


@JOSH: Cela pourrait être lié à la programmation, si Aaron est intéressé par la manière de mettre en œuvre la journalisation de tuer. S'il veut juste savoir s'il est possible avec les technologies existantes, alors vous avez raison.


7 Réponses :


1
votes

Je ne connais aucun enregistrement de signaux envoyés aux processus, à moins que le Oom Killer ne le fait.


2 commentaires

@retracile - Lire sur SA , ACCT et acon dans les pages manuelles Linux.


... mieux adapté comme un commentaire.



1
votes

Si vous utilisez sudo , il sera enregistré. Outre cela, le processus tué peut enregistrer certaines informations (à moins que cela ne soit terminé avec des préjugés extrêmes). Vous pouvez même pirater le noyau pour enregistrer des signaux.

En ce qui concerne l'enregistrement de la raison, un processus a été tué, je n'ai pas encore vu de programme psychique.

Le piratage du noyau n'est pas pour les faibles de cœur, mais Hella Fun. Vous auriez besoin de corriger les routines d'expédition de signal pour connecter des informations à l'aide de . 9) quand tuer (3) , SIGSEND (2) ou similaire est appelé. Lire " Le modèle de gestion des signaux Linux " Pour plus d'informations sur la manière dont les signaux sont manipulés.


2 commentaires

1 - Où peut-on les informations sur le journal des processus «tués»? Syslog? 2 - Comment le noyau peut-il être "piraté" pour enregistrer des signaux? Merci...


Eh bien, c'est la question n'est pas ça. Si c'est tué, il ne peut pas très bien écrire sur quoi que ce soit pour que le noyau doit être celui pour interpréter le signal. Mais tuer est assez normal pour que le noyau ne soigne pas réellement que quelque chose a été tué, vous devez donc vous brancher un module pour lui dire d'attraper le signal et les soins. Il y a des programmes d'emballage C réellement celles qui font cela si si vous le faites, je suggérerai certainement de poster sur superutilisateur



1
votes

Si vous écrivez votre propre programme, vous pouvez attraper le signal de tuer et écrire dans un fichier de logfile avant de mourir réellement. Cela ne fonctionne pas avec Kill -9 cependant, juste la nature normale.

Vous pouvez voir des détails sur ifroway .


0 commentaires

1
votes

Si le processus l'obtient via tuer (2), , à moins que le processus ne soit déjà connecté, la seule trace externe serait un MOD de noyau. C'est assez simple; Il suffit de faire un imprimante () , c'est comme printf (). Recherchez la sortie dans dmesg .

Si le processus l'obtient via / bin / kill , il s'agirait donc d'une matière relativement facile d'installer un exécutable d'emballage qui s'est connecté. Mais ceci (livraison de signaux via / bin / kill ) est peu probable car tuer est également une bash intégrée.


2 commentaires

La famille * printf peut être problématique. Le noyau Linux offre imprimante ( LinuxGrill.com/anonymous/fire/netfilter/... ) comme une alternative. Il y a aussi Syslog ( Linux.die.net/man/3/syslog )


Gratter syslog ; Il n'est pas sûr d'appeler d'un contexte de noyau.



4
votes

modifié: En bref, le noyau OS ne se soucie pas du fait que le processus est tué. Cela dépend de savoir si le processus enregistre n'importe quoi. Tout le noyau se soucie de ce stade, c'est la mémoire de récupération. Mais lisez-le, sur la façon de l'attraper et de le connecter ...

Selon CAF et Stephen C S. >

  1. Si vous exécutez un module de démon comptable BSD dans le noyau, tout est enregistré. Merci à Stephen C pour le remarquer! Je n'ai pas réalisé que cette fonctionnalité que je dispose de cela éteint / désactivé.
  2. Dans mon recul, selon le commentaire de la CAF - les deux signaux qui ne peuvent pas être attrapés sont sigkill et sigstop , ainsi que le fait que j'ai mentionné atexit < / Code>, et j'ai décrit dans le code, cela aurait dû être Quitter (0); .. Ooops Merci FRCA!

    original

    Le meilleur moyen d'attraper le signal de tuer est que vous devez utiliser un gestionnaire de signal pour gérer quelques signaux , pas seulement < Code> SIGKILL SIMPLE suffira, SIGABRT (ABORT), SIGQUIT (Terminal Program Quit), SIGSTOP et Sighup (HANGUP). Ces signaux ensemble sont ce qui attirerait la commande tuer sur la ligne de commande. Le gestionnaire de signal peut ensuite enregistrer les informations stockées dans / var / log / messages (dépendant de l'environnement ou de la distribution Linux). Pour plus de référence, voir ici .

    aussi, voir ici pour un exemple de comment Pour utiliser un gestionnaire de signal à l'aide de la fonction Sigaction .

    Ce serait aussi une bonne idée d'adopter l'utilisation de la fonction Atexit , puis lorsque le code EXIT S au moment de l'exécution, l'exécution exécutera la dernière fonction avant de revenir à la ligne de commande. Référence pour atexit est ici . < / P>

    Lorsque la fonction C EXIT est utilisée et exécutée, la fonction Atexit exécutera le pointeur de fonction lorsqu'il est appliqué comme dans l'exemple ci-dessous. - merci CAF pour cela!

    Un exemple d'utilisation de Atexit comme indiqué: xxx

    J'espère que cela t'aides, Meilleures salutations, Tom.


4 commentaires

Deux signaux ne peuvent pas être pris - sigkill et sigstop . Fonctions enregistrées avec Atexit ne sont exécutées que si le processus se déroule via Calling Quitter ou revenir depuis Main .


FAUX - Le noyau se soucie si vous avez l'option de comptabilité de processus BSD activée dans votre noyau.


@CAF: Je vais modifier la modification en conséquence et merci pour les têtes rapides / rappel!


@Stephen C: Je vais modifier la modification en conséquence! Il montre juste qu'il y a des choses sous Linux que je ne me dérange jamais avec ... :)



7
votes

Si votre noyau Linux est compilé avec la comptabilité de processus ( config_bsd_process_act ) Option activée, vous pouvez démarrer l'enregistrement des informations de comptabilité des processus à l'aide de la commande Accton (8) et utilisez < Code> SA (8) Pour accéder aux informations enregistrées. Les informations enregistrées incluent le code de sortie 32 bits qui inclut le numéro de signal.

(ce genre de choses n'est pas largement connu / utilisé ces jours-ci, mais je me souviens toujours de cela des jours de 4.x BSD sur Vaxes ...)


0 commentaires

0
votes

Au fait, si un processus est tué avec un signal est annoncé par le noyau au processus parent via de attendre (2) appel système. La valeur renvoyée par cet appel est l'état de sortie de l'enfant (l'octet inférieur) et certaines informations relatives au signal dans l'octet supérieur au cas où ce processus a été tué. Voir attendre (2) pour plus d'informations.


0 commentaires