Linux 在后台启动脚本时,我会运行两个进程

Linux 在后台启动脚本时,我会运行两个进程,linux,bash,shell,process,background-process,Linux,Bash,Shell,Process,Background Process,我遇到了一个奇怪的情景,这让我很困惑 我有一个在后台启动的脚本,带有& 例如: 在运行它之后,我做了一个ps-ef | grep some_脚本,我看到两个进程在运行,其中第二个进程不断获得不同的PID,但它的父进程是我启动的进程(就像父进程正在生成死亡的子进程-但这从未写入代码)。 例如: 这里有什么?它似乎也把脚本的输出和功能搞得一团糟,基本上使它成为一个永无止境的过程(当我在脚本中定义了开始和停止时) 剧本: ` #! /bin/bash # Set Global Variables LO

我遇到了一个奇怪的情景,这让我很困惑

我有一个在后台启动的脚本,带有&
例如:

在运行它之后,我做了一个ps-ef | grep some_脚本,我看到两个进程在运行,其中第二个进程不断获得不同的PID,但它的父进程是我启动的进程(就像父进程正在生成死亡的子进程-但这从未写入代码)。 例如:

这里有什么?它似乎也把脚本的输出和功能搞得一团糟,基本上使它成为一个永无止境的过程(当我在脚本中定义了开始和停止时)

剧本: ` #! /bin/bash

# Set Global Variables
LOGDIR="/srv/script_logs"
OUTDIR="/srv/audits"
BUCKET_LS=$OUTDIR"/LSOUT_"$i"_"$(date +%d%b%Y)".TXT"
MYCMD1="aws s3api list-objects --bucket viddler-flvs"
MYCMD2="--starting-token"
MAX_ITEMS="--max-items 10000"
MYSTARTING_TOKEN='""'
rm tokenlog.txt flv_out.txt

while [[ $MYSTARTING_TOKEN != "null" ]]
do
# First - Get the token for the next batch
CMD_PRE="$MYCMD1 $MAX_ITEMS $MYCMD2 $MYSTARTING_TOKEN"
MYSTARTING_TOKEN=($($CMD_PRE | jq -r .NextToken))
echo $MYSTARTING_TOKEN >> tokenlog.txt
# Now - get the values of the files for the existing batch
# First - re-run the batch and get the file values we want
MYOUT2=$($CMD_PRE | (jq ".Contents[] | {Key, Size, LastModified,StorageClass }"))
echo $MYOUT2 | sed 's/[{},"]//g;s/   /\n/g;s/StorageClass://g;s/LastModified://g;s/Size://g;s/Key://g;s/^ *//g;s/ *$//g' >> flv_out.txt
#echo $STARTING_TOKEN
done
`我想你有

(
some shell instructions
)
在您的.sh内

此语法在新进程中执行命令(但命令行将是相同的)。

您的脚本看起来如何?我需要在一些_script.sh中查看代码来帮助执行此语法。作业报告了什么?添加了我正在使用的脚本作业返回空白,或管道中的shell代码(例如,
somecommand |在读取时;do…done
);这也将在子shell中运行。我认为它更像是我命令中的管道-有时它是最基本的;)谢谢大家!
# Set Global Variables
LOGDIR="/srv/script_logs"
OUTDIR="/srv/audits"
BUCKET_LS=$OUTDIR"/LSOUT_"$i"_"$(date +%d%b%Y)".TXT"
MYCMD1="aws s3api list-objects --bucket viddler-flvs"
MYCMD2="--starting-token"
MAX_ITEMS="--max-items 10000"
MYSTARTING_TOKEN='""'
rm tokenlog.txt flv_out.txt

while [[ $MYSTARTING_TOKEN != "null" ]]
do
# First - Get the token for the next batch
CMD_PRE="$MYCMD1 $MAX_ITEMS $MYCMD2 $MYSTARTING_TOKEN"
MYSTARTING_TOKEN=($($CMD_PRE | jq -r .NextToken))
echo $MYSTARTING_TOKEN >> tokenlog.txt
# Now - get the values of the files for the existing batch
# First - re-run the batch and get the file values we want
MYOUT2=$($CMD_PRE | (jq ".Contents[] | {Key, Size, LastModified,StorageClass }"))
echo $MYOUT2 | sed 's/[{},"]//g;s/   /\n/g;s/StorageClass://g;s/LastModified://g;s/Size://g;s/Key://g;s/^ *//g;s/ *$//g' >> flv_out.txt
#echo $STARTING_TOKEN
done
(
some shell instructions
)