2013-12-11 5 views
2

Я столкнулся с странным сценарием, который меня колотит.При запуске скрипта в фоновом режиме я получаю два процесса:

У меня есть сценарий, который я запускаю в фоновом режиме с &
Например:

[email protected]# some_script.sh & 

После его выполнения, я пм -ef | grep some_script, и я вижу, что TWO-процессы работают там, где второй процесс продолжает получать другой PID, но это Parent - это процесс, который я начал (например, родительский процесс порождает детей, которые умирают, но это никогда не было написано в коде). пример:

[email protected]# ps -ef | grep some_script.sh 
root  4696 17882 0 13:30 pts/2 00:00:00 /bin/bash ./some_script.sh 
root  4778 4696 0 13:30 pts/2 00:00:00 /bin/bash ./some_script.sh 
[email protected]# ps -ef | grep some_script.sh 
root  4696 17882 0 13:30 pts/2 00:00:00 /bin/bash ./some_script.sh 
root  4989 4696 0 13:30 pts/2 00:00:00 /bin/bash ./some_script.sh 

Что здесь дает? Похоже, что он запутывает вывод и функциональность скрипта и в основном делает его бесконечным процессом (когда у меня есть определенный старт и остановка в скрипте).

сценарий: ` #!/Бен/Баш

# 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 

`

+2

Как выглядит ваш скрипт? – devnull

+1

Мне нужно будет увидеть код в some_script.sh, чтобы помочь с этим. – Donovan

+1

Что сообщает 'jobs'? – cdarke

ответ

3

Я думаю, у вас есть

(
some shell instructions 
) 

внутри вашего .sh
Этот синтаксис выполняет команды в новом процессе (но командная строка будет такой же).

+0

Это или код оболочки в конвейере (например, 'somecommand | while read; do ... done'); это также будет работать в подоболочке. –

+0

Я вижу, что это большая часть трубы в моей команде - Иногда это основы, которые получают ya;) Спасибо всем! – user3091317

Смежные вопросы