Будет ли AWK в оболочке создавать подпроцесс? - PullRequest
0 голосов
/ 05 июня 2018

в моем скрипте я пишу несколько функций awk для фильтрации того, что я хочу, по заданным ключевым словам.
Однако, когда я выполняю свой скрипт, я обнаружил, что есть несколько процессов, один из которых является родительским для другого, и все входные параметрыто же самое

enter image description here

Когда я использую pstree для PPID, я обнаружил следующее:

enter image description here

Итак, мой вопрос: будет ли awk в оболочке создавать подпроцесс?Это работает как форк или exec для создания подпроцесса?Если нет, то как объяснить PID и PPID следующим образом?

Кстати, скрипт, выполняющийся на другом компьютере, не будет генерировать подпроцесс, а pstree PPID только найдет следующее содержимое:

enter image description here

Имеет ли это какое-то отношение к ядру машины или что-то в этом роде?Вот некоторые части awk в моих сценариях:

в original_pids я хочу получить старый идентификатор процесса по заданным ключевым словам, таким как my_name, что-то полученное параметрами:

original_pids=$(ps -ef | grep ${my_name} | grep -v ${my_pid} | grep ${instance_id} | grep -F ${module_name} | grep -F ${module_path} | grep -F ${notice_log_paths} | grep -F ${wf_log_paths} | awk '{print $2}' | tr -d ' ')

и в duration_block - что получить содержимое файла в блоке, учитывая номера начала и середины строки файла, а $ {cur_last_file} - полученное имя файла

duration_block=$(awk 'BEGIN{ORS="\\n"} NR=='${begin}',NR=='${mid}' {print $0}' ${cur_last_file}| tr -d '\0')

Большое спасибо ~~~ :)

#!/bin/sh 
headers="Content-Type: application/vnd.kafka.binary.v1+json"
file_name="./logs/data1.log"
file_size=$(sed -n "$=" ${file_name})
my_pid=$$
# kafka_proxy is fake here 
kafka_proxy="http://aimer.cp01.com:8989/topics/fake_topic_name"
echo "my_pid=${my_pid}"
sleep 10

begin=1
block=900

while true ; do 
    mid=$[begin+block] 
    duration_block=$(awk 'BEGIN{ORS="\\n"} NR=='${begin}',NR=='${mid}' {print $0}' ${file_name})
    duration_block=$(openssl enc -base64 <<< ${duration_block})
    post_data='{"topic_name":"fake_topic_name","data":"'${duration_block}'"}'
    post_data=$(openssl enc -base64 <<< ${post_data})
    content='{"records":[{"value":'$(echo \"${post_data}\")'}]}'
    #curl -X POST -H "${headers}" -d @- "${kafka_proxy}" <<< ${content}
    #echo "block=${duration_block}"
    begin=${mid}
done

1 Ответ

0 голосов
/ 08 июня 2018

Я считаю, что скрипт создаст подпроцесс при выполнении в скрипте команд curl и awk.Используя pstree, ps -ef |grep $ {name_of_the script} и nohup повторно выполняет сценарий: На рисунке 1 я обнаружил, что aimer.sh этот сценарий, генерирующий подпроцесс , введите здесь описание изображения

И в image2 я создаюв другом окне используйте команды, подобные этой введите описание изображения здесь watch -n 1 'pstree ${PPID}' для мониторинга дочернего pid PPID

И на рисунке 3 создайте другое окно, используйте nohup, чтобы увидеть, что происходит, когда PPID генерирует дочерний pidпутем вывода лога в скрипт введите описание изображения здесь

После этого я получил это, когда родительский скрипт 1. использует awk и tr для фильтрации содержимого из вышестоящего файла в блоках 2. используйте curlотправить данные на прокси-сервер kafka

Родительский скрипт сгенерирует другой подпроцесс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...