6
votes

Comment pulser une application multi-threadée?

Modifier (fait progresser):

J'essaie de piller un démon VSFTPD. J'ai le code suivant qui attache au démon. Ensuite, il affiche avec succès le PID du premier processus généré. Toutefois, pour les enfants de ce processus engendré, il renvoie les PIDS 2,3, .. Le programme attrape la sortie des processus engendrés cependant, ce qui me fait penser que je suis proche. P>

Des idées? P>

Attached to 2015 // daemon
Attached to offspring 5302 // new connection handler
Attached to offspring 2 // should be authenticator
Child 5303 exited       // authenticator exiting on successful login
Attached to offspring 3 // should be process serving files
Child 5304 exited       // logout: process serving files
Child 5302 exited       // connection closed
Attached to offspring 5305 // new connection handler
Attached to offspring 2    // ... repeat
Child 5306 exited
Attached to offspring 3
Child 5307 exited
Child 5305 exited


4 commentaires

Avez-vous examiné strace (1) du tout?


@Nikolai N Fetissov Je regarde la source de la strace maintenant. Pas exactement facile à suivre. Ce qui est plus intéressant, c'est que j'ai attaché la ronde au PID de VSFTPD et lorsque je me connecte à l'aide de NCFTP, il se bloque sur le dialogue "Connexion ...". Quand je suis sorti de la rythme, il continue correctement. Donc, la strace ne fonctionne pas vraiment non plus.


Avez-vous utilisé l'option -f ?


@Nikolai N Fetissov, oui, sans cela, je ne pense pas que cela suivrait même le premier clone.


4 Réponses :


1
votes

en lisant le Jouer avec Ptrace Article, j'ai trouvé Ce commentaire à partir d'un utilisateur qui a également eu des difficultés à ce que: xxx


2 commentaires

Oui, c'est le code que j'ai basé sur moi. J'ai essentiellement la même chose, mais simplifiée à des fins d'affichage. Lorsque j'utilise sa version directement, je reçois un "enfant inconnu" et ça sort. Cela a du sens car il stocké (2,3, ..) et reçu le PID actuel lors de la sortie. J'apprécie le post cependant.


@ofosho OK, je vais examiner cela plus tard.



1
votes

Après avoir augmenté davantage avec mon code, je me rends compte qu'il fonctionne réellement pour capturer tous les appels système provenant du parent et de ses enfants. Le seul problème est que les PID sont retournés en tant que numéros relatifs plutôt que des PID réels. Il n'entraîne pas non pas certain qu'une attente PID était effectivement générée par le parent. De toute façon, le code vous obtiendra tous les appels système. J'aimerais toujours savoir pourquoi le PID est relatif, pour mes propres connaissances, mais le code fonctionne bien.


1 commentaires

Ils ne sont pas des pids relatifs, ils sont pids dans un nouvel espace de noms PID (à partir de 1 à nouveau). Essayer réellement de strace vsftpd en ce moment et les coudes profondément dans la source de la strace.



1
votes

laissez le thread exécuter avant le prochain attendre () code>.

Essayez: p> xxx pré>

avant: p>

while(TURE)


0 commentaires

0
votes

dans un processus multithreadé, chaque Le fil peut être fixé individuellement à un (potentiellement différent) traceur ou gauche non attaché et donc non débogué. Donc, "TRACEE" signifie toujours "(un) fil", jamais "A (éventuellement Traitement multithread) ". Les commandes PTRACE sont toujours envoyées à un Tracée spécifique utilisant un appel de la forme

de la page man http://man7.org/linux /man-pages/man2/ptrace.2.html


1 commentaires

C'est vrai, mais pas très utile.