Articles of 进程

Linux中每个进程的编程资源监视

我想知道是否有一个有效的解决scheme来监视Linux中的进程资源消耗(CPU,内存,networking带宽)。 我想用C ++编写一个守护进程来监视某些给定的PID。 据我所知,经典的解决scheme是周期性地从/ proc读取信息,但这似乎并不是最有效的方式(涉及很多系统调用)。 例如,为了监视50个进程每秒的内存使用情况,我必须每秒从/ proc打开,读取和closures50个文件(这意味着150个系统调用)。 更不用说在读这些文件时涉及的parsing。 另一个问题是networking带宽消耗:对于我想要监视的每个进程,这是不容易计算的。 NetHogs采用的解决scheme涉及到相当高的开销,我认为它使用libpcap捕获和分析每个数据包,然后为每个数据包确定本地端口并在/ proc中search以find相应的进程。 你知道是否有更有效的替代方法提出这些方法或任何图书馆处理这个问题?

如何使用sched_getaffinity(2)和sched_setaffinity(2)。 请给代码示例在C程序中使用

我在尝试着 并行运行16个副本(处理器固定)(每个内核2个副本) 在处理器固定的情况下(每个内核2个拷贝)同时运行8个拷贝,并在某个函数表示函数1完成后,将处理器内核翻转到最远的内核。 我面临的问题是如何select最远的处理器。 有些朋友build议使用sched_getaffinity(2)和sched_setaffinity,但我没有find任何好的例子。 请帮忙。

收集Linux命令输出

我现在在一台linux机器上。 我有一个Java程序,可以运行一些Linux命令,例如ps , top , list或free -m 。 在Java中运行命令的方式如下所示: Process p = Runtime.getRuntime().exec("free -m"); 我怎么能通过Java程序收集输出? 我需要处理输出中的数据。

multithreading进程的线程ID是否可以与其他正在运行的进程的进程ID相同?

我试图find一种方法来唯一标识多进程环境中的线程。 我有一个服务器,跟踪不同的进程连接到它,其中一些是multithreading的,其中一些不是。 为了从multithreading连接中识别线程,我使用线程ID作为唯一的标识符(在任何给定时间最多连接1个multithreading进程)。 我的问题是:是否有可能其中一个线程的线程ID可能与系统上运行的另一个进程的进程ID相同? 先谢谢您的帮助!

打开一个shell并在java中与其I / O进行交互

我想打开一个shell(xterm)并与之交互(写入命令并读取shell的输出) 这是一个不能工作的代码示例: public static void main(String[] args) throws IOException { Process pr = new ProcessBuilder("xterm").start(); PrintWriter pw = new PrintWriter(pr.getOutputStream()); pw.println("ls"); pw.flush(); InputStreamReader in = new InputStreamReader(pr.getInputStream()); System.out.println(in.read()); } 当我执行这个程序时,打开一个“xterm”窗口并且不input“ls”命令。 只有当我closures窗口,我得到一个“-1”打印,没有任何东西从shell读取 重要- 我知道我可以使用: Process pr = new ProcessBuilder(“ls”)。start(); 要获得输出,但我需要打开其他用途的“xterm” 非常感谢

Linux:捕获已经运行的进程的输出(纯C!)

我的情况如下:我有很多小的小玩意儿(非常接近路由器,不完全是,但无论如何,这是不相关的); 他们正在运行一个基于MIPS的Linux发行版。 为了控制它们,可以在那里telnet(通过串行端口),然后向交互式的bash-like shell发出命令,然后写回一些输出。 shell的input和输出都连接到/ dev / ttyAS0。 现在,我想自动化所有这一切,即编写一个程序,它将在gizmo中运行,是一个监听某个端口的小型服务器,可以将任何命令传递给所述shell,捕获shell的输出并将其中继回到谁联系到服务器。 一世: 1)可以在Gizmo里面安装(小,<500KB)程序2)不能修改操作系统,启动脚本,shell,任何东西3)有root权限4)知道如何写SOAP服务器5)知道如何获得一个SOAP消息,将它翻译成一个命令并将其注入到/ dev / ttyAS0中6)不知道如何捕获shell的回复7)知道如何获取shell的回复,将其转换回SOAP消息并回复原始查询者。 所以基本上,问题是6):如何在/ dev / ttyAS0中注入一个string,从而使shell执行它,捕获shell的输出? 我知道 Redirecting Output from a Running Process 也就是说,我知道如果我在箱子里面运行GDB(或者strace),我可以改变shell的stdout,但是我不能在那里安装它 – 它太大了,反正这个方法看起来太像一个黑客了。 所以,总结一下: 如何在不使用gdb或strace的情况下捕获已经运行的进程的标准输出(IN PURE C),而无法访问进程的启动方式? 或者 – 几乎等同于 – 如何捕捉正在写入terminal的内容,IN PURE C?

PHP-FPM – 杀死所有属于php-fpm的linux进程 – 一个命令行

我注意到,PHP-FPM并不总是正确关机。 问题是一些服务依然存在,无法重新启动。 我想要一个命令行来运行,这将杀死所有的php-fpm进程,所以我可以将它添加到init.d,所以停止将确保它们全部被删除。 如果我运行以下,我可以看到所有的过程: ps -aux | grep php-fpm 他们显示如下: 793 102971 0.0 0.1 4520304 5868 ? S 13:20 0:00 php-fpm: pool tokyodating.co 794 102972 0.0 0.1 4520304 5868 ? S 13:20 0:00 php-fpm: pool turkeydating.co 794 102973 0.0 0.1 4520304 5868 ? S 13:20 0:00 php-fpm: pool turkeydating.co 794 102974 0.0 0.1 4520304 5868 […]

如何findunix上没有日志文件的死进程的原因?

这是一个面试问题。 开发者开始了一个过程。 但是当一个客户想要使用这个过程时,他发现这个过程并没有运行。 开发人员login,发现过程中死亡。 开发者怎么知道什么是错的? 跟进:应该将日志写入文件的正在运行的进程。 但是文件中没有日志。 开发者怎样才能弄清楚在这个过程中发生了什么? 我想:如果程序可以重新运行,我将使用gdb来跟踪进程。 如果不是,请检查进程(应用程序)中的输出文件。 或者,添加打印到代码。 但是,还有其他的方法可以通过引用操作系统生成的一些信息来实现吗?

从multithreading应用程序生成进程

我有一种情况,我需要从一个非常大的multithreading应用程序中产生一个辅助进程,但是我没有完全的控制权。 现在我正在使用fork() / exec() 。 这在很多情况下都是有效的,但是在某些情况下,在exec()发生之前,孩子会奇怪地崩溃。 我怀疑这是因为fork()multithreading应用程序通常被认为是一个真正的坏主意。 我真的很喜欢以primefaces方式启动一个进程的方式,没有fork()父进程:所有文件描述符closures,环境设置我想要的方式,CWD设置等。这应该避免所有的fork()我的multithreading父应用程序,并处理文件描述符inheritance,等posix_spawn()应该是理想的。 不幸的是,在Linux上, posix_spawn()使用fork()和exec() 。 vfork()被定义为挂起父进程,直到subprocess调用exec() 。 这似乎更像我想要的,但我的理解是, vfork()通常被认为是一个历史遗迹这些天,相当于fork() —这仍然是这种情况? 处理这个问题最糟糕的方式是什么? 注意: 我不能在任何线程启动之前产生我的进程(因为我不能在那个时候运行代码) 由于外部的要求,我不能重新devise我的应用程序不需要帮助程序 在产卵辅助过程之前,我不能暂停所有的线程,因为它们不属于我 这是在Linux上。 涉及Java,但我所有的代码都在C

如何在Linux中每5秒钟查找一个特定进程的内存消耗量

我只想知道如何在特定时间内find特定进程的内存消耗(比如5秒) 我是新来的Linux。 所以,这样做的详细步骤将不胜感激