我正在做一个项目,需要mplayer
运行多个实例才能从两个文件创建画外音实时混音。因此,音乐始终以 90% 的音量播放(在下一个时间轴中表示为“M”),在某些时刻,我们会降低音量(“m”)以便将声音(“V”)置于音乐之上,之后,当声音样本结束时,我们会将音乐恢复到 90%。
时间线(分钟)
0===========1===========2===========3===========4===========...
_____________VVVVVVVV__________VVVVVVVVVVVVVV__________VVVVV...
MMMMMMMMMMMMMmmmmmmmmMMMMMMMMMMmmmmmmmmmmmmmmMMMMMMMMMMmmmmm...
到目前为止,一切都运行良好。但是,出于某种原因,很多时候第二个mplayer
实例完成了画外音播放,但该过程仍然处于活动状态并且永远不会结束。
此处提供答案:终止除运行脚本的进程之外的所有进程不适用于此案。
我也尝试过这个问题的可接受答案:https://unix.stackexchange.com/questions/50555/kill-many-instances-of-a-running-process-with-one-command但这会杀死每一个实例mplayer
,我需要让第一个实例不断播放音乐。
在此页面http://www.oracleflash.com/20/How-to-kill-all-processes-with-one-command-in-Linux.html他们重现了一种杀死应用程序启动的所有进程的方法。这对于这种情况非常有用,但这也会杀死所有实例mplayer
。
预期解决方案
我正在使用以下命令保存音乐播放器的 PID:
mplayer -shuffle -playlist playlist.m3u </dev/null >/dev/null 2>&1 & echo $! > player.pid
有了那个 PID 号,我想使用最后一页给出的解决方案来终止所有进程除了player.pid 文件中保存的那个。因此,放置cat player.pid
在
kill -9 `ps -ef | grep oraxpo | grep -v grep | awk '{print $2}'
可能会奏效。
问题是我不知道该把它放在哪里。或者是否有其他/更好的方法可以做到这一点。
另一个想法是一次杀死最后一个进程,但在第一个进程上停止。
任何想法都值得赞赏。
提前致谢。
答案1
你可以试试:
pgrep mplayer | grep -vf player.pid | xargs kill -9
笔记:
pgrep
是这查找进程信息的工具。它甚至支持否定匹配和使用 PID 文件,但不幸的是,我无法找到一种有选择地否定匹配的方法。- 由于您有文件,只需使用
grep
从文件中读取-f
,然后使用否定匹配-v
xargs
将输入转换为参数,因此您不需要使用命令替换
答案2
最简单的提示
只需打开htop
并转到search
,然后搜索mplayer
,然后点击next
,kill
就可以了。就这么简单。
Htop 安装命令
- Fedora/Red Hat 企业版
dnf install htop
- Ubuntu/Debain
sudo apt install htop
- 拱
sudo pacman -S htop
希望它对你有用。
如果有用的话请给我点赞。