Articles of 进程

可以退出()无法终止进程?

我的程序中有一个注册的信号处理程序。 在收到不需要的信号(SIGABRT)时,我在信号处理程序中调用'exit(-1)'来退出这个过程。 但是正如在几个会话中所注意到的那样,它调用exit(),但是没有终止进程。 这个问题是随机产生的,我强烈怀疑执行exit()。 出现任何可能导致exit()无法终止进程的原因或情况。 谢谢。

在* nix中,是什么导致顶部命令“睡眠”?

是什么导致了我在top看到的这些sleeping过程? 如果我要调用PHP的sleep()函数,是否会增加我在top看到的sleeping计数? sleeping有没有什么缺点?

在Linux中更改进程名称

我在Linux上,我分叉/从我的C衍生应用程序中释放一个新的进程。 是否有可能改变这些新的subprocess的命名? 我希望能够识别正在启动的进程,以防出现问题,我需要手动杀死它。 目前他们都有相同的名字。

杀死一个Java进程(在Linux中)的进程名称,而不是PID

在configuration/安装Hadoop集群时,我们通常需要杀死一个Java进程/守护进程。 我们看到用jps命令运行的Java进程/守护进程。 通常我们用PID来杀死一个Java进程。 例如 kill -9 112224 inputPID是有点困难的。 有没有办法通过名称来杀死进程? 在一个单一的命令?

如何通过在C中的PID来监视事件的外部进程?

有什么图书馆有一些function允许一个监视外部进程的事件通过其pid_t ? 我的意思是,监视一个外部进程是否已经退出,或者是否已经创build了一个或多个subprocess(带有fork ),还是已经成为另一个可执行映像(通过exec或posix_spawn函数系列调用),还是一个Unix信号是交付给它。 编辑 我需要一些不会干扰被监控程序执行的东西。 所以,我不应该使用ptrace ,因为它会在发出某种信号时停止正在监视的进程,并且每当发生这种情况时都需要恢复进程。

在linux上启动一个进程的时间

如何在使用c语言的ubuntu linux机器上find进程启动时间。 在Linux中有/ proc / [pid] / stat文件给出信息 starttime %lu /*The time in jiffies the process started after system boot*/ 和文件/ proc / stat给出 btime %lu /*measurement of system boot time since Epoch in seconds*/ 为了添加这两个值,我怎样才能把以前的值转换成秒,因为它是在jiffies单元。

在64位堆栈驻留缓冲区溢出?

我正在研究一些安全相关的事情,现在我正在玩我自己的堆栈。 我所做的应该是非常微不足道的,我甚至不试图执行堆栈,只是为了表明我可以控制64位系统上的指令指针。 我已经closures了所有的保护机制,只是为了能够使用它(NX-bit,ASLR,还用-fno-stack-protector -z execstack编译)。 我在64位汇编方面没有太多的经验,花了一些时间寻找和尝试自己,我想知道是否有人能够解决我遇到的问题。 我有一个程序(源代码如下),它只是将一个string复制到一个堆栈驻留缓冲区,没有边界检查。 但是,当我覆盖了一系列的0x41我期待看到RIP被设置为0x4141414141414141,而我发现我的RBP被设置为这个值。 我确实遇到了分段错误,但即使将RSP设置为合法值,RIP在执行RET指令时也不会更新为此(非法)值。 我甚至在GDB中validation过,在RET指令之前,在RSP上有一系列包含0x41的可读存储器。 我在LEAVE指令的印象之下: MOV(E)SP,(E)BP POP(E)BP 然而,在64位上,“LEAVEQ”指令似乎做了(类似于): MOV RBP,QWORD PTR [RSP] 我认为这只是在执行这条指令之前和之后观察所有寄存器的内容。 LEAVEQ似乎只是RET指令的一个依赖于上下文的名字(GDB的反汇编给出的),因为它仍然只是一个0xC9。 而且RET指令似乎是用RBP寄存器做些事情的,可能会解引用它? 我的印象是RET所做的(类似于): MOV RIP,QWORD PTR [RSP] 但是就像我刚才提到的那样,它似乎取消了RBP的引用,我正在考虑这样做,因为当没有其他寄存器似乎包含非法值时,我得到了分段错误。 程序的源代码: #include <stdio.h> #include <string.h> int vuln_function(int argc,char *argv[]) { char buffer[512]; for(int i = 0; i < 512; i++) { buffer[i] = 0x42; } printf("The buffer is […]

为什么僵尸进程存在?

维基百科说:“一个终止但永远不会被父母等待的儿童stream程变成了一个僵尸stream程。” 我运行这个程序: #include <stdio.h> #include <unistd.h> #include <stdlib.h> int main() { pid_t pid, ppid; printf("Hello World1\n"); pid=fork(); if(pid==0) { exit(0); } else { while(1) { printf("I am the parent\n"); printf("The PID of parent is %d\n",getpid()); printf("The PID of parent of parent is %d\n",getppid()); sleep(2); } } } 这会创build一个僵尸进程,但我不明白为什么在这里创build一个僵尸进程? 该程序的输出是 Hello World1 I am the parent […]

在64位Linux服务器上运行64位JVM的好处/缺点?

我们在64位Linux 2.6服务器上运行32位Sun Java 5 JVM,但显然这将每个进程的最大内存限制为2GB。 所以有人build议我们升级到64位的JVM来消除这个限制。 我们目前在服务器上运行多个JVM(Tomcat实例)以保持2GB的限制,但为了简化部署,我们希望整合它们。 如果你已经这样做了,你能分享一下你的经验吗? 你在运行64位的JVM吗? 你会build议留在Java 5,还是可以同时移动到Java 6 和 64位? 我们是否应该期望性能问题,无论好还是坏? 有什么特别的地方应该关注我们的回归testing吗? 感谢您的任何提示!

什么是Linux进程表? 它是由什么组成的?

这个术语不断出现在我的操作系统笔记中,我不完全确定它是什么/它在哪里存储以及如何或为什么。