我正在寻找在 Linux 中启动的进程 ID 为 0 的进程。我知道init有 PID 1 ,它是 Linux 中的第一个进程,是否有任何进程的 PID 为 0?
使用flock,多个进程可以同时拥有一个共享锁,或者等待获取一个写锁。我如何获得这些进程的列表?
也就是说,对于给定的文件 X,理想情况下找到每个进程的进程 ID,该进程持有或正在等待文件锁定。尽管只是计算等待锁定的进程数,但这将是一个非常好的开始。
我发现这pidstat将是监控流程的好工具。我想计算特定进程的平均内存使用量。这是一些示例输出:
02:34:36 PM PID minflt/s majflt/s VSZ RSS %MEM Command
02:34:37 PM 7276 2.00 0.00 349212 210176 7.14 scalpel
Run Code Online (Sandbox Code Playgroud)
(这是输出的一部分pidstat -r -p 7276。)
我应该使用常驻集大小 (RSS) 或虚拟大小 (VSZ) 信息来计算平均内存消耗吗?我在维基百科和论坛上阅读了一些内容,但我不确定是否完全理解这些差异。另外,似乎它们都不可靠。那么,如何监视进程以获取其内存使用情况?
对此事的任何帮助都会有所帮助。
我想在单个 shell 上运行多个命令(进程)。都有自己的连续输出,不停歇。在后台运行它们Ctrl- C。我想将它们作为单个进程(子shell,也许?)运行,以便能够用Ctrl-停止所有这些进程C。
具体来说,我想使用mocha(监视模式)运行单元测试,运行服务器并运行一些文件预处理(监视模式),并在一个终端窗口中查看每个测试的输出。基本上我想避免使用一些任务运行器。
我可以通过在后台运行进程 ( &)来实现它,但是我必须将它们放到前台来阻止它们。我想要一个包装它们的过程,当我停止这个过程时,它会停止它的“孩子”。
我想确定哪个进程具有 UNIX 套接字的另一端。
具体来说,我问的是用 来创建的socketpair(),尽管任何 UNIX 套接字的问题都是一样的。
我有一个程序parent可以创建一个socketpair(AF_UNIX, SOCK_STREAM, 0, fds), 和fork()s。父进程关闭fds[1]并保持fds[0]通信。孩子反其道而行之,close(fds[0]); s=fds[1]。然后孩子exec()的另一个程序,child1。两者可以通过这个 socketpair 来回通信。
现在,假设我知道parent是谁,但我想弄清楚是谁child1。我该怎么做呢?
有几种工具可供我使用,但没有一个可以告诉我套接字的另一端是哪个进程。我试过了:
lsof -c prognamelsof -c parent -c child1ls -l /proc/$(pidof server)/fdcat /proc/net/unix基本上,我可以看到两个套接字以及关于它们的所有内容,但无法判断它们是否已连接。我试图确定父进程中的哪个 FD 正在与哪个子进程通信。
$ ps -Awwo pid,comm,args
PID COMMAND COMMAND
1 init /sbin/init
2 kthreadd [kthreadd]
3 ksoftirqd/0 [ksoftirqd/0]
5 kworker/u:0 [kworker/u:0]
6 migration/0 [migration/0]
7 cpuset [cpuset]
8 khelper [khelper]
9 netns [netns]
10 sync_supers [sync_supers]
11 bdi-default [bdi-default]
12 kintegrityd [kintegrityd]
13 kblockd [kblockd]
14 kacpid [kacpid]
15 kacpi_notify [kacpi_notify]
16 kacpi_hotplug [kacpi_hotplug]
17 ata_sff [ata_sff]
18 khubd [khubd]
Run Code Online (Sandbox Code Playgroud)
括号是什么意思?args 是否总是返回进程命令的完整路径(例如/bin/cat)?
有没有办法在solaris中生成完整的进程列表,而不会被截断?我试过ps命令,有以下参数:
-f 生成完整列表。(见下文
完整列表中列的重要性-
ing。)
-l 生成一个长列表。(见下文。)
所以,那些似乎都在做我想做的事,但是,在 ps 手册页的更深处,我发现:
args 命令及其所有参数作为
细绳。实现可能会截断
这个值到字段宽度;这是
依赖于实现的是否有
发生进一步截断。这是
未指定是否为字符串
表示的是参数的一个版本
列表,因为它被传递给命令
当它开始时,或者是
参数,因为它们可能已被修改
通过应用程序。应用程序不能
取决于能够修改他们的
参数列表并进行修改
将反映在 ps 的输出中。
Solaris 实现限制了
字符串到 80 个字节;字符串是
参数列表的版本
开始时传递给命令。
这基本上是说输出将被截断,我对此无能为力。所以,我来了。当然,其他人也遇到过这个问题,甚至可能有办法解决它。我猜 ps 做不到,所以我需要使用其他工具来做到这一点。那是准确的吗?
我为一个相当难的数学问题开发了一个算法,这个问题可能需要几个月才能完成。由于我的资源有限,我在我的 Ubuntu 12.04 (x86) 笔记本电脑上开始了这个。现在我想安装一些更新并实际重新启动笔记本电脑(“请重新启动”消息很烦人)。
有没有办法保存整个进程,包括其分配的内存,以便在重启后继续?
以下是有关您可能需要的流程的一些信息。如果需要,请随时询问更多信息。
./binary > ./somefile &”或“time ./binary > ./somefile &”调用了该进程,我真的记不清了。当我签free入其中一台 Prod 服务器时,它显示正在使用 70% 的内存:
total used free shared buffers cached
Mem: 164923172 141171860 23751312 0 4555616 20648048
-/+ buffers/cache: 115968196 48954976
Swap: 8388600 0 8388600
Run Code Online (Sandbox Code Playgroud)
但是我没有找到正在使用内存的进程,我尝试了该top命令,它显示进程只使用内存 1.1 和 5.4 %
如何找到哪个进程正在使用内存?
以下是顶级命令结果:
15085 couchbas 25 0 2784m 2.4g 40m S 183.7 1.5 299597:00 beam.smp
28248 tibco 18 0 124m 100m 3440 S 20.9 0.1 2721:45 tibemsd
15334 couchbas 15 0 9114m 8.6g 3288 S 9.0 5.4 12996:28 memcached
15335 couchbas 18 0 6024 600 468 …Run Code Online (Sandbox Code Playgroud)