在 bash 脚本中,我想逐行捕获长命令行的标准输出,以便在初始命令仍在运行时对其进行分析和报告。这是我能想象的复杂方法:
# Start long command in a separated process and redirect stdout to temp file
longcommand > /tmp/tmp$$.out &
#loop until process completes
ps cax | grep longcommand > /dev/null
while [ $? -eq 0 ]
do
#capture the last lines in temp file and determine if there is new content to analyse
tail /tmp/tmp$$.out
# ...
sleep 1 s # sleep in order not to clog cpu
ps cax | grep longcommand > /dev/null
done
Run Code Online (Sandbox Code Playgroud)
我想知道是否有更简单的方法。
编辑: …
我运行命令ps -A | grep <application_name>并获取这样的进程列表:
19440 ? 00:00:11 <application_name>
21630 ? 00:00:00 <application_name>
22694 ? 00:00:00 <application_name>
Run Code Online (Sandbox Code Playgroud)
我想从列表中杀死所有进程:19440, 21630, 22694。
我试过,ps -A | grep <application_name> | xargs kill -9 $1但它有错误。
kill: illegal pid ?
kill: illegal pid 00:00:00
kill: illegal pid <application_name>
Run Code Online (Sandbox Code Playgroud)
我怎样才能优雅地做到这一点?
有什么方法可以检查内核杀死了我的哪些进程?有时我登录到我的服务器,发现应该运行一整夜的东西在 8 小时后停止了,我不确定是应用程序在做还是内核在做。
/proc/sys/vm/swappiness很好,但我想要一个像/proc/$PID/oom_adj. 这样我就可以让某些进程比其他进程更不可能换掉它们的任何页面。与 不同memlock(),这不会阻止程序被换出。就像nice,默认情况下,用户不能使他们的程序不太可能,但只会更有可能被交换。我想我不得不调用这个/proc/$PID/swappiness_adj。
我有一个长时间运行的bash实例(在screen会话内),它在循环内执行一组复杂的命令(每个循环执行管道、重定向等)。
长命令行写在终端内 - 它不在任何脚本内。现在,我知道 bash 进程 ID,并且我有 root 访问权限 - 我怎样才能看到在其中执行的确切命令行bash?
bash$ echo $$
1234
bash$ while true ; do \
someThing | somethingElse 2>/foo/bar | \
yetAnother ; sleep 600 ; done
Run Code Online (Sandbox Code Playgroud)
在另一个 shell 实例中,我想查看在 PID 1234 中执行的命令行:
bash$ echo $$
5678
bash$ su -
sh# cd /proc/1234
sh# # Do something here that will display the string \
'while true ; do someThing | somethingElse 2>/foo/bar | \
yetAnother ; sleep …Run Code Online (Sandbox Code Playgroud) 当我执行 'top' 时,我看到我的 perl 脚本进程处于 'S' 状态。有没有办法知道,是什么让这个 perl 进程进入睡眠状态以及唤醒它的方法?任何调试方法以提供有关 perl 脚本中行的更多见解,使其进入“S”状态。
我想看看我的进程是否进行了很多上下文切换。我还想看看操纵任务组如何影响上下文切换的数量。
要知道进程何时开始,我的第一个猜测是检查/proc/<pid>/cmdline上次写入/修改的时间。
ps还显示一个START字段。我认为这两个来源是相同的。有时它们并不相同。怎么会这样?
在最近的“为什么 'kill -9 0' 结束我的控制台会话”和“如何获得内核恐慌”问题之间,我在我的马鞍下有一个毛刺,并尝试kill -9 1了一个最新的 Arch linux 笔记本电脑。我是作为用户 ID“root”来做的。
我完全预料到会发生某种崩溃、恐慌或关机,但什么也没发生。我又做了kill -9 1一次,没有效果。
Arch linux 机器systemd这些天都systemd在运行,所以:如何在 kill -9中幸存下来?我希望在 Linux 3.7 内核中有特殊情况代码,但也许存在一些我没有想到的其他原因。
用 PID 1 运行的其他东西呢?init我相信Slackware 仍在使用,但我害怕在我的生产 Slackware 服务器上尝试它。我的无线路由器上的 DD-WRT 运行某种形式的 /sbin/init。