我已经搜索了这个问题,但从未发现任何对我的特定情况有用的东西。
所以,我想弄清楚的是正在运行的某个命令的PID,所以我可以在必要时杀死它。我知道通过键入echo $!
所谓的
my_command & echo $!
应该给我PID。但事实并非如此,我想我知道为什么: 我的命令如下:
screen -d -m -S Radio /path/to/folder -f frequency -r path/to/song
首先打开一个分离的screen
然后键入命令,以便它被执行并继续在后台运行。这样echo
向我显示的PID是错误的。我猜它显示的是screen -d -m -S Radio /path/to/folder -f frequency -r path/to/song
的PID而不是屏幕创建的新终端中运行的命令的PID。
但还有另一个问题:当我在终端中运行screen -ls
时,后台运行的命令不会显示出来!我很确定它正在运行,因为Pi的CPU使用率一直在25%(而不是通常为0%或1%),当我输入ps au
时,我实际上可以看到命令和PID。
所以现在我打电话给社区:关于如何在新终端中找到某个命令的PID的任何想法?我正在编写一个bash脚本,因此必须能够通过代码获取PID。 Perfect将是一个将PID存储在变量中的命令!
答案 0 :(得分:1)
感谢@glennjackman,我设法通过一个简单的pid=$(pgrep search_word)
获得了我想要的PID。起初它不起作用,但不知怎的,我经过一些试验和错误后才能使它工作。对于那些想要对变量进行PID的人,只需输入
screen -ls
关于var a, b, c = ...;
while (condition) {
// Change a, b, c...
}
// Use a, b, c
没有显示我的分离会话的问题,它仍然没有解决,但我并不为此烦恼。再次感谢您解决我的问题@glennjackman!
编辑:
第二个问题解决了,请查看关于berends的评论。
答案 1 :(得分:0)
您可以通过编写(例如)
轻松找到所有正在运行的进程及其PIDps aux
该过程由屏幕运行,因此您可以通过编写以下内容来更轻松地找到它:
ps aux | grep screen
有关ps和我使用的参数的更多信息,请检查(快速谷歌) - > https://www.lifewire.com/g00/uses-of-linux-ps-command-4058715?i10c
编辑:您也可以将此命令与bash脚本一起使用。