Linux 获取用sshpass启动的远程进程的PID

Linux 获取用sshpass启动的远程进程的PID,linux,pid,nohup,sshpass,Linux,Pid,Nohup,Sshpass,我有一个bash脚本,需要在远程机器上启动一些进程。 我已经使用sshpass命令完成了这项工作 我需要存储远程进程的PID sshpass -p password ssh user@ipaddr /bin/bash << EOF nohup process > /dev/null 2>&1 & echo $! > pid_file cat pid_file EOF 我用脚本尝试了以下操作: sshpass-p密码sshuser@ipaddr/bi

我有一个bash脚本,需要在远程机器上启动一些进程。 我已经使用
sshpass
命令完成了这项工作

我需要存储远程进程的PID

sshpass -p password ssh user@ipaddr /bin/bash << EOF
nohup process > /dev/null 2>&1 & echo $! > pid_file
cat pid_file
EOF
我用脚本尝试了以下操作:

sshpass-p密码sshuser@ipaddr/bin/bash/dev/null 2>&1&echo$!>pid_文件
cat-pid\u文件
EOF

当我检查远程机器时,进程启动,pid_文件中也写入了一个数字。但是进程id和pid_文件的编号不匹配

不使用脚本直接在终端上执行上述命令集,不会在pid_文件中写入任何内容

有人能帮助存储远程进程的正确pid吗

sshpass -p password ssh user@ipaddr /bin/bash << EOF
nohup process > /dev/null 2>&1 & echo $! > pid_file
cat pid_file
EOF
或者您可以直接跳过
$

sshpass -p password ssh user@ipaddr /bin/bash <<EOF
nohup process > /dev/null 2>&1 & echo \$! > pid_file
cat pid_file
EOF
sshpass-p密码sshuser@ipaddr/bin/bash&1&echo\$!>pid_文件
cat-pid\u文件
EOF
或者最好使用此处引用的字符串分隔符:

sshpass -p password ssh user@ipaddr /bin/bash <<'EOF'
nohup process > /dev/null 2>&1 & echo $! > pid_file
cat pid_file
EOF
sshpass-p密码sshuser@ipaddr/bin/bash&1&echo$!>pid_文件
cat-pid\u文件
EOF
或者您可以直接跳过
$

sshpass -p password ssh user@ipaddr /bin/bash <<EOF
nohup process > /dev/null 2>&1 & echo \$! > pid_file
cat pid_file
EOF
sshpass-p密码sshuser@ipaddr/bin/bash&1&echo\$!>pid_文件
cat-pid\u文件
EOF
或者最好使用此处引用的字符串分隔符:

sshpass -p password ssh user@ipaddr /bin/bash <<'EOF'
nohup process > /dev/null 2>&1 & echo $! > pid_file
cat pid_file
EOF
sshpass-p密码sshuser@ipaddr/bin/bash&1&echo$!>pid_文件
cat-pid\u文件
EOF

执行
nohup进程2&1>pid\u文件可能会给您提供更多信息。这是一个难题。我必须在后台运行进程“iperf3”。也许执行
nohup process 2&1>pid_file
会给你更多信息。它就是这样卡住的。我必须在后台运行进程“iperf3”。是的,宾果。谢谢你,卡米尔。这个逃避角色真的很有帮助。我不能使用
-c
选项,因为在执行命令之前还需要一些验证。但另一个问题是,
cat pid_文件
没有保存在变量中。我做了
var=$(cat-pid\u文件)
但是
echo$var
给出了空白。原因可能是什么?您可以通过将
-c
选项传递给bash来完成对here文档或here字符串的所有操作。可以尝试先将命令字符串保存到文件中,然后将其传递给bash,如。那样更干净。您还可以检查文件是否有错误。是的,宾果。谢谢你,卡米尔。这个逃避角色真的很有帮助。我不能使用
-c
选项,因为在执行命令之前还需要一些验证。但另一个问题是,
cat pid_文件
没有保存在变量中。我做了
var=$(cat-pid\u文件)
但是
echo$var
给出了空白。原因可能是什么?您可以通过将
-c
选项传递给bash来完成对here文档或here字符串的所有操作。可以尝试先将命令字符串保存到文件中,然后将其传递给bash,如。那样更干净。您还可以检查文件是否有错误。