Я вошел как root, но strace
дает мне это:
root@kyznecov-System:/home/kyznecov# ps -e | grep 111 3807 pts/2 00:00:00 111 3810 pts/2 00:00:00 111 root@kyznecov-System:/home/kyznecov# strace -p 3810 attach: ptrace(PTRACE_ATTACH, ...): Operation not permitted Could not attach to process. If your uid matches the uid of the target process, check the setting of /proc/sys/kernel/yama/ptrace_scope, or try again as the root user. For more details, see /etc/sysctl.d/10-ptrace.conf root@kyznecov-System:/home/kyznecov root@kyznecov-System:/home/kyznecov# cat /proc/sys/kernel/yama/ptrace_scope 0
Затем я попытался использовать gdb
для отладки многопроцессорной программы в Eclipse CDT с разветвлением, и он дал мне тот же результат / ошибку:
Есть идеи?
Одна из причин для получения ошибки:
attach: ptrace(PTRACE_ATTACH, ...): Operation not permitted
заключается в том, что процесс уже связан с gdb
, strace
или подобным. Чтобы проверить, так ли это, запустите:
grep TracerPid /proc/$THE_PID/status
Если он ненулевой, то это pid существующей программы, которая уже выполняет трассировку в этом процессе. ]
Как izx прокомментировал, это должно только смочь произойти из-за ошибки ядра. Таким образом, любому, кто может в настоящее время производить эту проблему - включая и особенно исходный плакат этого вопроса - было бы целесообразно сообщить об этом как об ошибке, читая ту страницу полностью и тщательно, и затем выполнение ubuntu-bug linux
на затронутой машине. По этому нужно сообщить linux
в Ubuntu, а не против магистрали (восходящее) ядро, если Вы не можете произвести его на ядре магистрали (Вы должны были бы иметь yama
загруженный).
Ожидаемое поведение в каждой версии Ubuntu, запускающейся с Ubuntu 10.10, состоит в том, что процесс A не может проследить рабочий процесс B, если B не является прямым ребенком (или выполнения как root
). Это - усовершенствование в защите, которое делает его так, чтобы процесс, который был поставлен под угрозу взломщиком, не мог использовать средства отладки, обеспеченные ядром для обнаружения информации от других процессов. Это объяснено в разделе объема ptrace сообщества Средств защиты страницу Wiki.
Это строгое поведение является значением по умолчанию, но может быть изменено, чтобы позволить процессу прослеживать любой рабочий процесс B, который выполняется с тем же идентификатором пользователя как процесс собственный A. Таким образом, можно настроить систему, чтобы позволить любому из процессов отлаживать друг друга. Это упрощает отладчики присоединения до уже рабочих процессов.
Установка для этого выставляется в /proc/sys/kernel/yama/ptrace_scope
sysctl. 1
обозначает более строгое поведение и 0
менее строгое поведение. Установка может быть считана с:
cat /proc/sys/kernel/yama/ptrace_scope
Менее строгое поведение (не по умолчанию) может быть установлено с:
echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
И более строгое поведение (по умолчанию) может быть установлено (или задержано) с:
echo 1 | sudo tee /proc/sys/kernel/yama/ptrace_scope
Не только был исходный плакат этого вопроса, не могущего присоединить strace
экземпляр к в настоящее время рабочему процессу с ptrace-scope
набор к 0
, но исходный плакат затем все еще не мог сделать так при выполнении strace
как root
. Трудно видеть, как это могло быть совсем не ошибкой - я настоятельно рекомендую сообщить об этом как один.
Сначала, я думал, что смог воспроизвести проблему где a ptrace_scope
установка 0
игнорируется и рассматривается, как будто это 1
. Но я больше не верю дело обстоит так, поскольку я сделал весь одинаковый вещи снова, и я не могу воспроизвести проблему. Я протестировал это на:
На всех трех машинах происходит ожидаемое поведение, и я не могу воспроизвести условие, о котором спрашивает исходный плакат этого вопроса. Вот некоторый текст от Терминала (от Точной живой системы):
lubuntu@lubuntu:~$ nano&
[1] 3492
lubuntu@lubuntu:~$ strace -p 3492
attach: ptrace(PTRACE_ATTACH, ...): Operation not permitted
Could not attach to process. If your uid matches the uid of the target
process, check the setting of /proc/sys/kernel/yama/ptrace_scope, or try
again as the root user. For more details, see /etc/sysctl.d/10-ptrace.conf
[1]+ Stopped nano
lubuntu@lubuntu:~$ cat /proc/sys/kernel/yama/ptrace_scope
1
lubuntu@lubuntu:~$ echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
0
lubuntu@lubuntu:~$ strace -p 3492
Process 3492 attached - interrupt to quit
--- SIGTTOU (Stopped (tty output)) @ 0 (0) ---
ioctl(1, SNDCTL_TMR_STOP or TCSETSW, {B38400 opost isig -icanon -echo ...}) = ? ERESTARTSYS (To be restarted)
--- SIGTTOU (Stopped (tty output)) @ 0 (0) ---
--- SIGTTOU (Stopped (tty output)) @ 0 (0) ---
ioctl(1, SNDCTL_TMR_STOP or TCSETSW, {B38400 opost isig -icanon -echo ...}) = ? ERESTARTSYS (To be restarted)
--- SIGTTOU (Stopped (tty output)) @ 0 (0) ---
strace
продолженные создающие сообщения, пока я не приостановил его, как ожидалось.
Я завершаю, рекомендуя снова сообщить об этом как об ошибке. Максимально содержащий поиск на https://bugs.launchpad.net (то, которое включает любого, сообщило об ошибках Ubuntu) для текста ptrace_scope
приводит просто к горстке результатов, в которых ясно ни один не отчеты для этой ошибки. Сообщение об ошибке помогло бы другим, может привести к обходным решениям или фиксации, и является, вероятно, единственным значимым способом продолжиться вперед в работе над этой проблемой (предполагающий, что проблема все еще происходит).