获取使用bash -c执行的后台进程的Pid

时间:2019-06-17 11:42:34

标签: bash shell

我需要在后台执行程序,并且该程序应在Shell执行后继续运行。 我正在使用nohup执行脚本,并使用bash -c使脚本在后台运行。

#!/bin/bash
cd /mnt/go/src/github.com/something && pwd && bash -c  "nohup go run apps/something/main.go >> /var/logs/go/crash.log 2>&1 &"

我需要使用nohup获取在生成的shell中执行的bash -c命令的pid,我尝试使用

 cd /mnt/go/src/github.com/something && pwd && bash -c  "nohup go run 
apps/something/main.go >> /var/logs/go/crash.log 2>&1 & echo $! > /var/run/something.pid"

但是输出为空字符串,有没有更好的方法来解决此问题。 由于使用bash -c,因此无法使用$?来获取PID。

1 个答案:

答案 0 :(得分:2)

您为什么要用abstract static class Animal{ private String name; String latin; } 链接所有内容?如果要在发生错误时停止脚本,只需在shebang下方添加import os import zipfile # get all files from directory files_list = os.listdir(".") # collect valid files files_to_pack = [] for item in files_list: try: file_name, file_extension = item.split('.') if file_extension == 'ad' or file_extension == 'txt': files_to_pack.append(item) except: pass # sort and pair files sorted_files = sorted(files_to_pack) pairs_files = [sorted_files[i:2+i] for i in range(0,len(sorted_files),2)] # zip paired files for item in pairs_files: with zipfile.ZipFile(item[0].split('.')[0] + '.zip', 'w') as myzip: myzip.write(item[0]) myzip.write(item[1]) myzip.close() 。如果命令返回的退出状态不等于0,则可确保脚本停止执行。请勿使用&&(在评论中阅读链接)。

正如我在先前的编辑中错误地评论的那样,您的代码似乎应该首先有效(thx @tripleee)。

我认为发生此错误是因为您使用set -e而不是set -e。发生该错误是因为Bash首先必须解析该字符串以替换变量。由于当前shell尚未创建子进程,因此"为空,因此您的文件也为空。尝试使用单引号:

'