我对终端脚本世界非常陌生。这就是我想要做的事情:
1) Find out the process that's using a given port (8000 in this case)
2) Kill that process
非常简单。我可以使用以下方式手动完成:
lsof -i tcp:8000 -- get the PID of what's using the port
kill -9 $PID -- terminate the app using the port
作为参考,这里正是使用lsof -i tcp:8000
时返回的内容COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
php 94735 MyUser 5u IPv6 0x9fbd127eb623aacf 0t0 TCP localhost:irdmi (LISTEN)
这是我的问题:如何从lsof -i tcp:8000
捕获PID值,以便我可以将该变量用于下一个命令?我知道如何创建我指定的变量..而不是那些动态制作的。
答案 0 :(得分:14)
您正在寻找的东西称为command substitution。它允许您将命令的输出视为shell的输入。
例如:
$ mydate="$(date)"
$ echo "${mydate}"
Mon 24 Feb 2014 22:45:24 MST
也可以使用`backticks`
代替美元符号和括号,但大多数shell style guides建议避免这样做。
在你的情况下,你可能想要做这样的事情:
$ PID="$(lsof -i tcp:8000 | grep TCP | awk '{print $2}')"
$ kill $PID
答案 1 :(得分:0)
这些方面应该有效:
lsof -i tcp:8000 | grep TCP | read cmd pid restofline
kill -9 $pid
在使用kill命令之前,只需回显它以确保。