linux - 从 nohup + sudo 获取 pid 和返回状态

标签 linux node.js shell sudo nohup

我有一个 shell 片段:

nohup sudo node server.js >> node.log 2>&1 &

if [ $? -eq 0 ]; then
  echo $! $?
  echo $! > pids
fi

我期望的是,如果node server.js正常运行,那么将这个进程的pid记录到文件:pids。

但它不起作用,$? 始终为 0,因为它是 sudo 进程的状态? 而$!也不是node命令进程的pid。

那么如何在上面的shell脚本中得到node server.js的正确返回码和pid呢?

最佳答案

我的最终解决方案:

#!/usr/bin/env bash

ROOT=$(cd `dirname $0`; pwd)

sudo kill -9 `cat ${ROOT}/pids` || true

nohup sudo node server.js >> node.log 2>&1 &

sleep 1

pid=$(ps --ppid $! | tail -1 | awk '{ print $1 }')

if echo $pid | egrep -q '^[0-9]+$'; then
    echo $pid > ${ROOT}/pids
else
    echo 'server not started!'
fi

关于linux - 从 nohup + sudo 获取 pid 和返回状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20716495/

相关文章:

linux - 如何将文本文件读取到参数

linux - 将 VPS 设置为流媒体复制器(用于在线广播)?

linux - 使用 awk 命令遍历文本文件并递增脚本的早上、下午和晚上部分的计数器

shell - 当前目录、父目录和根目录的路径

linux - 如何使用 xargs 删除 iptables 规则?

java - 如何将 .NET Windows 服务应用程序迁移到 Linux

Linux命令查找用法混淆

javascript - 为什么我不能设置 Jquery 的属性并在 Electron 中得到未定义的答案

javascript - 在 Express.js 中停止执行 Sequelize promise

javascript - 如何使用 Mongoose 中的聚合查询过滤 $match 等于对象值