忘了说了,运行在Suse Tumbleweed上,桌面是KDE Plasma。
我的目录中有bin
一个符号链接mpv
,
$ ls -l bin/Play
lrwxrwxrwx 1 boffi users 12 Feb 11 12:33 bin/Play -> /usr/bin/mpv
我有一个脚本,可以调用Play
,嗯,播放随机音乐文件
$ cat bin/play_alarm
#! /usr/bin/bash
files=($(find $HOME/Music/$1 -type f))
n_files=${#files[@]}
index=$(($RANDOM%$n_files))
file=${files[$index]}
body=$(
echo $file | sed -E '
s./home/boffi/Music/..
s./[01][0-9]_./.
s/\..*$//
s./. → .g
s._. .g
s| → ([^→]+)$| → <b>\1</b>|')
notify-send -u low -a "The Alarm Player" --expire-time=10000 Playing "$body" &
Play --no-video --no-terminal ${files[$index]}
根据我的理解,我可以使用名称来杀死mpv
的特定问题,但是mpv
Play
$ bin/play_alarm & sleep 10 ; killall Play ; sleep 2 ; killall mpv
[1] 1385
Play: no process found
$ Terminated
[1]+ Exit 143 bin/play_alarm
$
我的问题是“如何更改可执行文件向系统呈现的名称”。当然是我做错了什么,或者说我有严重的误会。
附录在你问之前,如果我play_alarm
从命令行启动,我可以使用它来杀死它killall play_alarm
,但通常play_alarm
是由 Plasma desklet 启动,然后
killall play_alarm
不起作用,killall Play
不起作用,killall mpv
消除警报和mpv
正在运行的每个问题。
聚苯乙烯如果你建议将 PID 保存在临时文件中,我宁愿不这样做,但如果其他一切都失败了......
答案1
我尝试过sleep
并得到以下观察结果:
ln -s /usr/bin/sleep slapen
./slapen 900 &
ps -ef | grep slapen
然后给出:
ljm 2623965 2534378 0 16:53 pts/5 00:00:00 ./slapen 900
ljm 2623968 2534378 0 16:54 pts/5 00:00:00 grep slapen
因此,该过程的名称slapen
不是sleep
您建议的名称。
pkill slapen
给出:
[1]+ Terminated ./slapen 900
这就是你似乎需要的。
答案2
为了澄清我在问题下的评论,
$ ls -l ~/bin/Play
lrwxrwxrwx 1 boffi users 12 Feb 11 12:33 /home/boffi/bin/Play -> /usr/bin/mpv
$ Play --no-terminal Music/Aldous_Harding/Party/06_Horizon.opus & sleep 3 ; ps
[1] 16098
PID TTY TIME CMD
11599 pts/4 00:00:00 bash
16098 pts/4 00:00:00 mpv
16121 pts/4 00:00:00 ps
$
另一方面
$ ls ~/bin/mysleep /home/boffi/bin/mysleep
$ mysleep 10 & ps
[1] 22546
PID TTY TIME CMD
11599 pts/4 00:00:00 bash
22546 pts/4 00:00:00 mysleep
22547 pts/4 00:00:00 ps
$
因此我们可以得出结论,出于某种原因,甚至没有任何原因,mpv
将其名称改回mpv
。