Почему ptrace если не через execl не работает?

В вопросе упоминаются два понятия: ptrace и execl.

ptrace - это системная функция в языке программирования C, которая позволяет контролировать выполнение процессов в операционной системе Linux. Она позволяет отслеживать и изменять состояние других процессов, отправлять сигналы процессам, читать или записывать значения в память процесса, а также вводить и извлекать регистры процесса.

execl - это функция в языке программирования C, которая позволяет выполнять другую программу в текущем процессе.

Теперь рассмотрим ситуацию, когда ptrace не работает без использования execl.

Когда вы запускаете программу с помощью ptrace, она становится потомком вашего процесса. ptrace требуется, чтобы потомок завершил свое выполнение, прежде чем ваш процесс сможет продолжить работу.

Проблема возникает, когда вы пытаетесь использовать ptrace без execl. Если ваш процесс продолжает работать после запуска потомка с помощью fork, то ptrace не сможет корректно отслеживать состояние потомка и выполнить требуемые операции, такие как чтение или запись в память потомка.

При использовании execl после fork, новая программа полностью замещает текущий процесс. Это означает, что потомок становится новым процессом, и ptrace может корректно контролировать его выполнение.

Поэтому, если вы хотите использовать ptrace для контроля выполнения другого процесса, вам необходимо использовать execl, чтобы гарантировать корректное выполнение ptrace и контроль над потомком.