Articles of 进程

PTRACE_ATTACH不允许

出于某种原因,我无法附加到我自己的进程?! 工作正常,如果我尝试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_scope, or try again as the root user. For more details, see /etc/sysctl.d/10-ptrace.conf $ cat /proc/sys/kernel/yama/ptrace_scope […]

文件locking与信号量

出于好奇,在Linux上实现进程间同步的首选方法是什么? 系统调用的sem*(2)系列似乎有一个非常笨拙和过时的接口,而有三种方法来locking文件 – fcntl() , flock()和lockf() 。 什么是内部的差异(如果有的话),你将如何certificate每个的用法?

Linux内核在进程死亡后进行处理和TCP连接清理的位置在哪里?

我正在试图在linux内核中find它在进程死后清理的地方。 具体来说,我想看看是否/如何处理打开TCP连接后处理-9信号杀死。 我很确定它closures了所有的连接,但我想看看细节,如果有任何连接不正确closures的机会。 指向linux内核源代码是受欢迎的。

if语句总是计算为TRUE

无论我的进程是启动还是停止,这个脚本总是返回“运行”,是否有任何理由? if ps ax | grep -v grep | grep "processName" > /dev/null then echo $"running" else echo $"not running" fi 非常感谢你 更新:我添加了我的脚本的完整示例,也许其他地方有什么问题。 case "$1" in start) # Start daemons. echo -n $"Starting daemon: " ;; stop) # Stop daemons. echo -n $"Shutting down: " echo ;; status) pgrep -f "ProcessName" > /dev/null if [ […]

killproc和pidofproc在Linux上

我有一个脚本,它使用killproc和procofpid命令,并在64位suse上执行罚款。 但是当我在32位redhat上执行脚本时,发现上面的命令不存在。 我没有32位Suse和64位redhat机器来testing我的脚本。 我的猜测是正确的,在64位红帽上面的命令应该可用? 还是上面的Suse和redhat特有的命令? 谢谢

内核/ sched.c / context_switch()保证每次进程切换时被调用?

我想改变Linux内核,以便每次当前的PID改变 – 即一个新的进程被切换 – 执行一些诊断代码(下面的详细解释,如果好奇的话)。 我做了一些挖掘,似乎每当调度器select一个新的进程,调用函数context_switch() ,这是有道理的(这只是从sched.c/schedule()的粗略分析)。 问题是,Linux调度程序对我来说基本上是黑魔法的,所以我想知道这个假设是否正确。 是否保证每次select一个新的进程在CPU上花费一些时间,都会调用context_switch()函数? 还是在内核源代码中有其他地方可以在其他情况下处理调度? (或者我完全误解了这一切?) 为了给出一些上下文,我正在使用MARSS x86模拟器来尝试对某些程序进行一些测量和测量。 问题是我的工具需要知道某些代码事件对应哪个执行过程,以避免误解数据。 这个想法是在MARSS中使用一些内置的消息传递系统来在每个上下文切换时传递新进程的PID,所以它总是知道当前正在执行的PID。 如果有人能想到一个更简单的方法来实现这一点,那也将不胜感激。

linux g ++将64位共享库代码链接到静态库

上下文:我可以创build一个链接到静态库的共享对象库,在32位Linux上没有任何问题。 当我在64位Linux上尝试相同的构build时,我看到这个链接器错误: 在创build共享对象时,不能使用“对本地符号”进行重定位R_X86_64_32S; 用-fPIC重新编译 这个错误在网上很常见。 解决scheme是编译静态链接库与位置无关的代码(-fPIC)。 我不明白为什么这不是32位版本所必需的。 任何人都可以帮忙吗?

将内存中正在运行的进程与磁盘中的可执行文件进行比

我有一个大的项目,它会将一个可执行文件(我们称之为问候语 )加载到内存中,但由于某种原因(例如,在不同的目录下有许多叫做问候语的文件),我需要知道内存中的进程是否正是我想用。 我知道如何比较两个文件:diff,cmp,cksum等。 但有什么办法比较内存中的进程与硬盘上的可执行文件?

Java进程内存比指定的限制大得多

我已经研究了大多数可用的方法来找出一个java进程实际上使用了多less内存。 到目前为止,我可以说我知道分配的内存总量可能是以下一项或多项: 堆内存(据说由我的-XX控制:MaxHeapSize = 4096米) 永久内存(据说由我的-XX控制:MaxPermSize = 1024m) 预留的代码caching(据说由我的-XX控制:ReservedCodeCacheSize = 256m) 线程的数量*线程大小(据说由我的-XX控制:ThreadStackSize = 1024) 但是结果和linux告诉我的结果是不一样的,用我发现的任何方法都可以获得java进程的内存消耗。 在我的情况下,它是运行在Ubuntu 11.10 x86_64机器上的Tomcat实例,JVM 1.6_u26 64位和ps -ALcf | grep org.apache.catalina.startup.Bootstrap | wc -l ps -ALcf | grep org.apache.catalina.startup.Bootstrap | wc -l ps -ALcf | grep org.apache.catalina.startup.Bootstrap | wc -l告诉我有145个线程或进程正在运行,全部链接到同一个根进程(Tomcat)。 这一切总结应该给我总(4096MB)+(1024MB)+(256MB)+ 145 *(1024KB)= 5521MB的最大内存。 什么jmap -heap PID告诉我,什么ManagementFactory.memoryMXBean.(heapMemoryUsage + nonHeapMemoryUsage).getCommitted()告诉我,上面的理论值都在配对上。 现在到linux端, top和nmon都告诉我这个进程分配的ResidentMemory是5.8GB – […]

如何在C ++中input密码到ssh?

我有一个C ++类,用于启动和与外部进程通信(有点类似Qt的QProcess – 我们不能使用Qt,因为我们正在一个小的embedded式系统上工作)。 它使用pipe和dup2系统调用来build立父进程和subprocess之间的链接。 问题是 – 它不适用于希望密码的ssh,scp和其他程序。 我已经放大了ssh,它似乎打开/ dev / tty,并以某种方式使用它从命令行读取密码。 有没有办法从我的class级input密码或检测到一个应用程序需要input来自除标准input以外的其他来源(不必是可移植的)?