Articles of 进程

Linux,在subprocess上超时

好吧,我需要编写一个调用脚本的代码,如果脚本中的操作挂起,则终止该过程。 首选的语言是Python,但我也正在浏览C和bash脚本文档。 看起来像一个简单的问题,但我不能决定最好的解决scheme。 从目前的研究来看: Python:有一些奇怪的线程模型,虚拟机一次使用一个线程,将无法正常工作? C:到目前为止的首选解决scheme似乎使用SIGALARM + fork + execl。 但是SIGALARM不是安全的,所以它可以破坏一切? Bash:超时程序? 不是所有发行版的标准? 由于我是Linux新手,我可能不知道500个不同的function,所以谁能告诉我什么是最安全和最干净的方式?

枚举当前加载的所有共享对象的所有ELF部分

我正在寻找一个枚举所有ELF节及其当前二进制文件的地址以及当前进程可能已经加载的所有共享对象的很好的方式。 我知道dl_iterate_phdr()的存在,它给了我一个易于使用的ELF 段的列表,但我正在寻找ELF 部分 ,所以这不是正确的要求。 我不关心可移植性,只要它在ELF的Linux上工作,我很高兴! 任何暗示赞赏!

Linux内核中的调度algorithm

在linux内核中实现了多less种不同的algorithm? 只有FIFO和循环,还是有其他的? 我在哪里可以find关于这个话题的很好的文档? 比方说,如果我想实现这些algorithmmyslef,我应该从哪里开始?

模拟阻塞系统调用中的进程

我试图testing一个难以在受控环境中复制的行为。 用例:Linux系统; 通常是Redhat EL 5或者6(我们刚刚开始使用RHEL 7和systemd,所以目前它已经超出了范围)。 有些情况下我需要重新启动服务。 我们用来停止服务的脚本通常工作得很好; 它发送一个SIGTERM到进程,这个进程是为了处理它而devise的; 如果进程在超时(通常是几分钟)内不处理SIGTERM,那么脚本会发送一个SIGKILL,然后等待几分钟。 问题是:在一些(罕见的)情况下,进程不会在SIGKILL之后退出; 这种情况通常发生在系统调用中,可能是因为内核级别的问题(文件系统损坏,或者NFS文件系统不工作,或者需要手动干预等等)。 当脚本没有意识到“老”的过程并没有真正退出,并开始一个新的过程,而旧的仍在运行, 我们正在用一个更强大的locking系统来解决这个问题(至less新的进程不会在老的时候启动),但是我发现很难testing整个事情,因为我还没有find一种方法来模拟困难的过程。 所以,问题是: 我怎么能手动模拟一个进程,即使作为一个特权用户发送一个SIGKILL,它不退出?

监视进程

有没有一种方法可以监视进程,如果它死了,是否可以调用一个脚本,从而使进程恢复?

是否有可能用一个SCHED_FIFO进程“挂起”一个Linux机器?

我想要一个实时的过程接pipe我的电脑。 🙂 我一直在玩这个。 我创build了一个基本上是一段while (1)的过程while (1) (永远不会阻塞也不会产生处理器),并使用schedtool通过SCHED_FIFO策略(也试过schedtool来运行它。 但是,这个过程也让其他进程也运行。 然后有人告诉我有关sched_rt_runtime_us和sched_rt_period_us 。 所以我将运行时设置为-1 ,以使实时进程接pipe处理器(并且试图使两个值相同),但是它也不起作用。 我在Linux 2.6.27-16-server上,只有一个CPU的虚拟机。 我究竟做错了什么? 谢谢, 编辑:我不想要一个叉子炸弹。 我只想要一个进程永远运行,而不让其他进程运行。

debuggingLinux进程挂起问题的实用程序?

我有一个进行configurationpipe理的守护进程。 所有其他进程应该与这个守护进程进行交互。 但是当我执行一个大的动作时,在几个小时之后,守护进程在2到3个小时内没有响应。 而且2-3小时后它正常工作。 debuggingLinux进程挂起问题的实用程序? 如何获得Linux进程挂起的点?

如何在Linux上以编程方式杀死进程树

我想写一个函数,产生一个subprocess,让它运行一段时间,然后杀死它,如果它还没有完成: int sysExecTimeout(const char * exePath, int timeoutSec); 在函数中,我使用fork和execl来产生孩子,当它超时的时候,我会在2秒后使用kill(pid, SIGTERM)和kill(pid, SIGKILL)来确保孩子死亡。 pid_t pid = fork(); if(pid == 0) { execl("/bin/sh", "sh", "-c", exePath); exit(127); } else if(pid != -1) { // timeout code if(timeout) { kill(pid, SIGTERM); sleep(2); kill(pid, SIGKILL); } } 我正在使用Linux,似乎当一个父进程死亡,孩子不会自动死亡。 因此,这两个kill调用将会杀死/bin/sh进程,并使exePath命令运行,因为它是/bin/sh的subprocess。 我正在尝试写sysExecTimeout函数,以致它杀死了以pid根的整个进程树,其中pid是来自pid = fork()的PID, 我需要这个,因为exePath命令会产生其他命令,也可以产生其他命令,可能会卡住和消耗资源。 我无法控制执行的exePath二进制文件/脚本,所以我不能编写自己的父母 – 死亡 – 如此杀死孩子的逻辑。 我尝试使用kill(0, SIGTERM) […]

Linux:多核CPU中的进程和线程

与stream程相比,线程是否真的不太可能从多核处理器中受益? 换句话说,内核会决定在单个内核而不是多个内核上执行线程吗? 我正在讨论属于同一个进程的线程。

诺基亚N900 – Meego Linux – xterminal – shell脚本 – 保持进程活着

我需要在诺基亚N900的一个程序 – Meego Linux – 如果它永远在死,它必须自己重新启动,我该怎么做呢? 我想用' x11vnc ' 如果被其他进程杀死,也可能再次启动进程,重新启动自己