一些答案中使用了“subreaper”这个词。搜索谷歌也会出现“刚刚使用”这个词的条目。
我如何理解什么是“子收割者”?
我对用于描述 Linux 信号传递的术语感到困惑。大多数文本都会说“信号被传递到进程”或“信号被传递到线程”。
据我了解,当内核调用该处理程序时,信号被“传递”到驻留在进程中的信号处理程序。该进程本身是异步运行的,这个“交付”过程类似于 CPU 调用中断处理程序。中断处理程序(信号处理程序)不是进程线程,也不是该进程下运行的任何线程,对吗?它是由内核启动的一个单独的线程。
因此,信号不会传递给线程或进程,而是传递给驻留在进程中的信号处理程序,并且不一定与任何特定线程关联。如果这不正确,请告诉我,例如,信号处理程序和 pthread 之间的关联,它证明了“信号传递到 pthread”这一术语的合理性。
例如,假设您有一个类似于以下内容的 shell 脚本:
longrunningthing &
p=$!
echo Killing longrunningthing on PID $p in 24 hours
sleep 86400
echo Time up!
kill $p
Run Code Online (Sandbox Code Playgroud)
应该做的伎俩,不是吗?除了进程可能提前终止并且它的PID可能已经被回收,这意味着一些无辜的工作在其信号队列中得到了一个炸弹。在实践中这可能确实很重要,但它仍然让我担心。破解 longrunningthing 使其自身死亡,或者在 FS 上保留/删除其 PID 都可以,但我正在考虑这里的一般情况。
例如,我们希望看到:
PROCESS IF TX RX FILE(regular) R/W
prog1 eth0 200kB/s 12kB/s -- --
wlan0 12kB/s 100kB/s -- --
-- -- -- file1 R
-- -- -- file2 R
-- -- -- file3 W
prog2 eth0 0kB/s 200kB/s -- --
-- -- -- file4 W
-- -- -- file5 W
Run Code Online (Sandbox Code Playgroud)
这可能吗?nethogs 只显示 TX/RX,而 lsof 只显示文件访问。
我目前正在做一个像这样的两步过程:
sudo nethogs
sudo lsof -a -d 1-999 -c hogging_program /
Run Code Online (Sandbox Code Playgroud)
有没有更好的办法?
我经常开始读取一个大文件,然后在一段时间后想退出,但是从按
Ctrl+C到程序停止有延迟。是否有可能通过多次按Ctrl+C键来缩短延迟?还是我在浪费我的按键?
我需要测试一个内存管理过程。
limitmemory 400k -p <pid>有没有办法在unix中做到这一点?任何常见的 Unix 实用程序都很棒。
我必须在机器上复制文件。而且数据量非常大。现在服务器需要正常服务,并且通常有一个特定的繁忙时间范围。那么有没有办法以一种方式运行这样的命令,如果服务器达到繁忙时间,它会暂停进程,当它超出该范围时,它会恢复它?
预期结果
cp src dst
if time between 9:00-14:00 pause process
After 14:00 resume cp command.
Run Code Online (Sandbox Code Playgroud) 我需要一个命令来等待进程开始接受特定端口上的请求。
linux中有没有这样做的东西?
while (checkAlive -host localhost -port 13000 == false)
do some waiting
...
Run Code Online (Sandbox Code Playgroud) 在我的联想T400和Ubuntu上,硬盘写入指示灯一直闪烁。我想知道在 Linux 中是否可以找出哪些进程正在对硬盘进行 I/O?就像 by 一样top,您可以找出哪些进程使用最多的 CPU 和内存。
process ×10
kill ×2
linux ×2
networking ×2
signals ×2
bandwidth ×1
files ×1
gnu-screen ×1
io ×1
kernel ×1
limit ×1
linux-kernel ×1
memory ×1
nohup ×1
open-files ×1
pthreads ×1
shell ×1