1

我试图在 bash 脚本中运行几个命令,但是它会挂断我的命令,等待它完成(它不会)。该脚本只是确保其运行。

#!/bin/bash
ps cax | grep python > /dev/null
if [ $? -eq 0 ]; then
  echo "Process is running."
else
  echo "Process is not running... Starting..."
  python likebot.py
  echo $(ps aux | grep python | grep -v color | awk {'print $2'})
fi

一旦它到达 python 命令,它就会在命令执行时挂断。直到我 cntrl c 才给出 pid。无论如何我可以让它运行这个 bash 脚本并在命令运行后退出 bash 脚本(无需等待它们完成)。

4

2 回答 2

7

一般来说,如果你想执行一个命令而不是等待它,你可以简单地&用作分隔符而不是;换行符。这样做时,该进程的 pid 在特殊变量中可供 shell 使用!。如果您想等待该过程完成,您可以使用wait. 如果您不想等待它,则只需省略wait. 在你的情况下:

python likebot.py &  # Start command asynchronously
echo $!              # echo the pid of the most recent asynchronous process
于 2013-08-20T11:48:09.723 回答
2

由于看起来likebot 应该一直在运行,因此您可能还需要考虑“nohup”,因为该作业仍然是您的登录过程的子进程,并且如果它死了,它就会死掉。

于 2013-08-21T23:42:47.823 回答