Вызов ptrace(PTRACE_ATTACH, pid, x, y)
, где pid
- это pid для B (в вашем примере), а x и y не имеют значения (вероятно, установив их в NULL) сделают вызывающий процесс родителем B для многих (но не все) цели (с ограничениями на основе идентификатора пользователя процессов, разумеется, чтобы вы не могли захватить чужие процессы, если вы не являетесь пользователем root).
После вызова ptrace(PTRACE_ATTACH,
дочерний элемент все равно получит либо своего исходного родителя, либо pid init в качестве родительского pid из getppid()
, но процесс трассировки сможет вызвать wait
и получить SIGCHLD
из процесса B.
Здесь много чего происходит, поэтому вам следует прочитать man 2 ptrace
и убедиться, что вы хорошо понимаете детали.