usuario sistemas procesos proceso operativos multihilos mapa los hilos entre ejercicios diferencias control comparativo bloque linux strace

linux - sistemas - mapa comparativo entre un proceso y los hilos



Stracing para adjuntar a un proceso multi-hilo (2)

Acabo de hacer esto de una manera sencilla, haciendo una lista de cada tid que se debe rastrear.

Puedes encontrarlos a través de ps :

$ ps auxw -T | fgrep program_to_trace me pid tid1 ... me pid tid2 ... me pid tid3 ... me pid tid4 ...

y luego, de acuerdo con la man strace , puede adjuntar a varios pids a la vez:

-p pid Attach to the process with the process ID pid and begin tracing. The trace may be terminated at any time by a keyboard interrupt signal (CTRL-C). strace will respond by detaching itself from the traced process(es) leaving it (them) to continue running. Mul‐ tiple -p options can be used to attach to up to 32 processes in addition to command (which is optional if at least one -p option is given).

Dice pid , pero iirc en Linux, pid y tid comparten el mismo espacio de nombres, y esto parece funcionar:

$ strace -f -p tid1 -p tid2 -p tid3 -p tid4

Creo que eso podría ser lo mejor que puedes hacer por ahora. Pero supongo que alguien podría extender strace con una bandera para expandir tid. Probablemente todavía haya una carrera entre encontrar los procesos y unirlos a ellos en los que a uno recién iniciado se lo pasaría por alto. Encajaría con la advertencia existente sobre strace -f :

-f Trace child processes as they are created by currently traced processes as a result of the fork(2) system call. On non-Linux platforms the new process is attached to as soon as its pid is known (through the return value of fork(2) in the par‐ ent process). This means that such children may run uncontrolled for a while (especially in the case of a vfork(2)), until the par‐ ent is scheduled again to complete its (v)fork(2) call. On Linux the child is traced from its first instruction with no delay. If the parent process decides to wait(2) for a child that is currently being traced, it is suspended until an appropriate child process either terminates or incurs a signal that would cause it to terminate (as determined from the child''s current signal dispo‐ sition). On SunOS 4.x the tracing of vforks is accomplished with some dynamic linking trickery.

Si quiero forzar un proceso de subprocesos múltiples (de todos sus subprocesos), ¿cómo debo hacerlo?

Sé que uno puede hacer strace -f para seguir el proceso bifurcado? Pero, ¿qué tal si se adjunta a un proceso que ya tiene varios subprocesos cuando comienzo a realizar el stracing? ¿Es una forma de indicar a strace que rastree todas las llamadas del sistema de todos los subprocesos que pertenecen a este proceso?


Como se respondió en varios comentarios, strace -fp <pid> mostrará el seguimiento de todos los subprocesos que son propiedad de ese proceso, incluso aquellos que ya se han generado antes de que comience strace .