如果程序使用ptrace来检测它是否在调试器中运行,我发现了下面的技巧:
catch syscall ptrace
commands 1
set ($eax) = 0
continue
end
有人能解释一下它是怎么工作的吗?我试图在i r eax之后插入commands 1,但是我不理解我得到的负值:
Catchpoint 1 (call to syscall ptrace), 0x00007ffff778af1e in ptrace (request=PTRACE_TRACEME) at ../sysdeps/unix/sysv/linux/ptrace.c:45
45 ../sysde
问题在主题中。让我解释一下“为什么”。我在Red Hat Enterprise Linux Server 7.7上运行我的应用程序。当我使用htop检查性能时,我发现很少有线程占用太多的CPU。我添加了一些调试日志,发现在我的代码中没有创建具有高CPU的线程。因此,我假设这些CPU贪婪线程是在我正在使用的第三方共享库中创建的。所以有一个问题:假设我有一个线程id (17405)。有没有办法找出是哪个共享库启动了这个线程?
如果这个问题太琐碎,我向您道歉--我不久前才开始使用Linux操作系统。
谢谢
由于某种原因,我无法依附于我自己的过程?!如果我尝试将strace作为根用户,那么工作得很好。
$ ./list8 &
[1] 3141
$ child4 starts...
$ strace -p 3141
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
我有一个剧本,我必须以一定的频率运行。这个脚本在一个循环中执行许多程序,在每个循环中设置一些变量。因为这个脚本运行了几个小时,所以我使用linux "at“命令doint运行它。
at now
>> ./myscript >> output
但每隔一段时间,我就得杀了剧本。我所做的就是杀死它执行的程序的PID,用ps -A \ grep 'name‘搜索它们。这里的问题是,由于有一个循环,我可以这样做很长时间。10分钟只是杀死过程。这是没有效率的。
我怎样才能找到几天前用“目前”-or启动的脚本的PID呢?ps -A @ grep
Pycharm on Windows是否可以配置为在linux (VirtualBox)中运行docker?
这意味着我想利用专业版的Pycharm Docker工具,但避免安装docker for windows,因为我使用的是安装了Docker的Linux虚拟机。
已尝试设置来宾主机vm的tcp://XX.XX:2375,但失败。我根本不确定这是否可以做到。