控制后台进程

控制后台进程

我正在寻找一种方法来从 shell 开始播放音频文件(mp3、m4a)作为后台任务,然后能够在稍后执行诸如暂停/快进之类的操作。

使用内置命令行选项是否可以:

$ play audio.mp3 &
$ play --pause

或者通过玩家的进程ID?

$ play audio.mp3 & echo $! > pid
$ control_process $(cat pid) --signal pause

(示例仅供说明。)

答案1

如果可以选择使用 VLC 播放器,您可以通过远程应用程序 (GUI) 或使用 dbus 调用的 CLI 来控制正在运行的 VLC 进程。

例如 - 假设安装了 qdbus - 在当前播放的音乐上切换播放/暂停:

$ qdbus org.mpris.MediaPlayer2.vlc /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.PlayPause

或转到播放列表中的下一首:

$ qdbus org.mpris.MediaPlayer2.vlc /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Next

查看所有可用命令:

$ qdbus org.mpris.MediaPlayer2.vlc /org/mpris/MediaPlayer2

另请参阅此线程https://stackoverflow.com/questions/14256193/linux-control-a-running-vlc-process-through-command-line

答案2

没有通用的解决方案,但至少有 2 个玩家可以做到这一点。

第一个是mplayernamed pipes

首先,创建/tmp/mplayer.fifo命名管道:

$ mkfifo /tmp/mplayer.fifo

启动mplayer并将其指向/tmp/mplayer.fifo

$ mplayer -novideo -idle -slave -input file=/tmp/mplayer.fifo file.mp3 </dev/null >/dev/null 2>&1 &

现在您可以通过写入以下内容来暂停和恢复播放/tmp/mplayer.fifo

$ echo pause > /tmp/mplayer.fifo

随后pause将恢复播放:

$ echo pause > /tmp/mplayer.fifo

您还可以执行其他操作,例如快进:

$ echo seek +60" > /tmp/mplayer.fifo

或快退播放:

$ echo "seek -60" > /tmp/mplayer.fifo

第二个是mocp。开始播放:

$ mocp -S; mocp -p file.mp3

暂停/恢复播放:

$ mocp --toggle-pause

答案3

您可能想了解一下MPD,因为它几乎可以做您想做的所有事情(远程控制、添加新曲目等)。它不是作为 shell 中的后台进程运行,而是作为系统服务运行,这意味着它可以轻松地跨多个会话和登录使用。它甚至能够从另一个系统进行远程控制(它广泛用于网络控制的自动点唱机类型设备)。

它还有许多不错的前端,包括可以从控制台使用的前端。

答案4

此控件的实现通常在程序本身内进行,但执行此类接口的一种非常常见的方法是命名管道。只要它位于同一主机上,并且您没有打开用于网络控制的套接字。您可以创建自己的程序来使用命名管道并执行所需的命令、终止进程等。如果您想查看命名管道的运行情况,我建议安装 CLI 播放器潘多拉;钢琴酒吧。它使用它来接受命令,如您的示例中所示。

相关内容