Articles of 进程

linux内核进程调度器的FCFSalgorithm

在linux kenel进程调度器中,有一个优先级types为SCHED_FIFO。 我想更改调度策略。 我有两个问题: 1-在内核源代码中,它提到在一个tick后,cpu应该属于被中断的进程(因为在FIFO中进程应该保持到它完成)? 2-在SCHED_RR中,被中断的进程再次插入到等待队列的末尾? 我使用2.6.31内核 谢谢。

如何在Linux上与CLONE_VM一起使用CLONE_SETTLS

我已经运行了一个场景,其中两个处理器之间的多次调用glibc / syscalls,其中一个通过调用clone()与CLONE_VM创build,最终会导致我的程序崩溃。 基于我的理解,如果我打算使用CLONE_VM,那么我还必须指定CLONE_SETTLS。 任何人都可以给我一个如何为我的新克隆准备TLS存储的示例,以及如何使用CLONE_SETTLS实际执行clone()调用?

加载testingmultithreading系统与使用单独进程的testing – 为什么线程版本要快得多?

我正在开发一个三个高级组件交互的系统 客户端(PHP) – logging器(Java) – MainBackend(Java) PHP客户端为每个收到的请求创build一个新的Linuxlogging器进程。 然后,logging器通过TCP向MainBackend发送消息,并开始logging从MainBackend接收到的消息。 请注意,logging器非常轻便,使用的内存很less。 我对这个系统进行了负载testing,通过增加用户数量N来访问系统。 然后我写了一个版本,Logger是multithreading的,所以每N个并发用户只使用一个进程,并对线程版本进行负载testing。 结果是,multithreading的版本是FAR更快,因为在一定的N以上快很多倍。我的问题是为什么? 如果开始每个Linux进程需要一定的时间T,为什么我没有看到两个图之间的恒定差异(T2-T1)? Linux在调度进程方面的效率远低于Java在调度线程方面的效率。 编辑:我没有提到的重要一点是,时间都是从logging器内完成的,所以启动过程/虚拟机的时间不会影响结果 – 我这样做了实验,以便有尽可能less的variables尽可能。

现有进程的Python命令行参数

我正在尝试使用cpulimit编写一个脚本来控制VM n KVM的cpu使用情况。 与cpulimit我可以限制一个虚拟机的CPU使用情况与PID说2112通过: ./cpulimit -p 2112 -l 50。 我想写一个可以打开界面的脚本 setcpu(vm_pid,limit) 这可以被称为任何次数,我打破了现有的限制。 我可以通过将限制值作为正在运行的cpulimit进程的运行时参数来覆盖现有的限制。 像subprocess.Popen(…,stdin = subprocess.PIPE)。 我有点困惑如何抓住正在运行的过程,并提供运行时参数。 例如(没有脚本): #./cpulimit -p 2112 -l 50 Process 2112 detected 现在,它将设置一个上限,现在我可以简单地进入 40 80 覆盖现有的限制。 我想编写这个行为。 如果你能提供一个关于如何编写这个脚本的指针或想法,那将是非常棒的。 非常感谢 Sethu

Sudo – 等待孩子,并获得孩子的PID

看来在sudo 1.7.2p2和1.7.4p5之间,等待执行进程的行为已经改变了。 它看起来像在旧版本sudo会开始新的进程,然后退出。 在较新的版本中,它启动新的进程,然后等待它。 这里有一些关于它的讨论: http : //www.sudo.ws/pipermail/sudo-users/2010-August/004461.html ,其中提到阻止它打破PAM会话支持。 这个改变破坏了我使用sudo在后台执行命令的一个脚本,就像老版本的sudo一样,我想要执行的命令将会后台运行,而新版本的sudo本身就是后台运行。 例如,由$!返回的进程 在这种情况下是为了睡觉 user@localhost$ sudo -V Sudo version 1.7.2p2 user@localhost$ sudo -u poweruser sleep 60 & [1] 17491 user@localhost$ ps -fp $! UID PID PPID C STIME TTY TIME CMD poweruser 17491 17392 0 16:43 pts/0 00:00:00 sleep 60 而在这种情况下,它是sudo user@localhost$ sudo -V Sudo version 1.7.4p5 […]

Python守护进程来检查进程在Linux中挂起

我在Ubuntu 12.04下使用Skype,有时会挂起(我之前用过的单词卡住) – 我没有收到消息,也没有收到消息。 发生这种情况很难发现,因为没有错误或警告。 如果那时我杀了Skype进程,它不会被杀死(除非我kill -9 )。 所以,我的想法是创build一个Python守护进程,它将检查Skype是否每分钟都卡住,并重新启动进程。 我的问题是如何检查一个进程是否挂起?

如果通过CTRL + C终止脚本,如何杀死由脚本启动的Java进程?

我有以下script1.sh : #!/bin/bash trap 'echo "Exit signal detected…"; kill %1' 0 1 2 3 15 ./script2.sh & #starts a java app ./script3.sh #starts a different java app 当我做CTRL + C时,它会终止script1.sh ,但由script2.sh启动的Java Swing应用程序仍然保持打开状态。 它怎么没有杀死它?

如何防止脚本被暂停停止?

我有一个python闹钟脚本,需要在某个时间唤醒我。当我睡觉并离开它时,我使用的具有Linux Mintfunction的笔记本电脑在闲置一段时间后会暂停。如何防止脚本从停止并保持运行? 我的笔记本电脑在我的房间,我需要closures它的盖子,因为它的光是烦人睡觉to.Here是我的脚本。 import time import sys import webbrowser alarm_HH = raw_input("Enter the hour you want to wake up at\n") alarm_MM = raw_input("Enter the minute you want to wake up at\n") print("You want to wake up at ", alarm_HH) while True: now = time.localtime() if now.tm_hour == int(alarm_HH) and now.tm_min == int(alarm_MM): webbrowser.open_new_tab("http://www.repeatmyvids.com/watch?v=SXLplRtMNfg&kmdom=youtube") break else: […]

用户进程,terminal和内核之间的通信

用户进程使用3个文件描述符与terminal进行通信。 terminal被认为是unix中的文件(例如/dev/tty ),并且还有内核的文件描述符,主要,次要编号来标识它。 所以内核通过terminal与用户进程通信。 另一种沟通方式是通过我们都知道的系统调用。 假设用户进程正在等待input(例如: enter two numbers: _ _ )。 当我们在键盘上按下1和2时,键盘缓冲区被填满,与键盘相关联的设备驱动程序将识别它并将在其等待队列中唤醒进程。 那么这个数据(即1和2 )如何对用户进程有效? 这将是通过terminal我猜。 另外如果redirect输出,例如$ ./a.out > file什么? 我已经检查使用isatty()该进程是不是与任何terminal关联。 那么内核将如何与用户进程交互? 假设我的程序需要键盘input。

我怎样才能从孩子的过程中获得价值?

我有一个脚本,在某些部分,我分叉一些进程来完成任务,主进程等待所有的孩子完成。 到目前为止,一切都好 问题:我有兴趣得到每个孩subprocess所花费的最大时间。 我现在所做的只是查看日志,在那里我打印每个孩subprocess所执行的操作的时间花费,并试图找出或多或less的时间。 我知道从subprocess中取回某些东西的唯一方法是通过某种共享内存,但是我想知道这个特定的问题是否有一个“准备好”/简单的解决scheme? 我的意思是为了让时光倒stream,父母的过程在一个地方打印出漂亮的时尚。 我认为可能有更好的办法比只检查所有的日志…. 根据评论更新: 我对孩subprocess的时间不感兴趣,比如哪个孩子花了很多时间去完成。 每个subprocess正在处理X个任务。 每个任务都会在更糟糕的情况下完成。 我正在寻找Y即完成X任务之一所花的时间