Рейтинг:0

Написание скрипта, который принимает PID в качестве аргумента и печатает PID всех своих GRANDchildren и grandgrandchildren.

флаг pr

Привет, я пытаюсь написать сценарий, который принимает аргумент PID и печатает всех внуков и правнуков PID, а не детей. пример:

$ printthem 3545
3546
3548
3666

Что я пытался сделать:

пс --ppid $1

Но он не дает мне идентификатор. Также я где-то читал о pstree, но я не совсем уверен, как правильно его использовать для достижения моей цели. Любое руководство будет очень признательно. Спасибо !

Nitsan Asraf avatar
флаг pr
@ bac0n большое спасибо!
BeastOfCaerbannog avatar
флаг ca
@ 24601 ОП хочет знать PID программ, которые, вероятно, работают в Ubuntu. Кроме того, они просят решение, связанное с Bash, судя по используемым тегам. Поскольку Bash является важной частью Ubuntu, вопросы по Bash актуальны и хорошо поддерживаются здесь. Так что вопрос вполне по теме и не должен быть закрыт. Также прочитайте этот [метапост] (https://meta.askubuntu.com/questions/13807/are-bash-shell-scripting-questions-on-topic) о вопросах, связанных с Bash.
24601 avatar
флаг in
@BeastOfCaerbannog, где ОП говорит, что они используют Ubuntu. Общие вопросы о сценариях можно задать на [stackoverflow] (https://meta.stackoverflow.com/questions/340130/where-to-ask-the-simplest-programming-questions).
Nitsan Asraf avatar
флаг pr
@ 24601 Ну, я спрашиваю об этом в AskUbuntu, чтобы вы могли предположить, что я использую Ubuntu. Если вы не уверены, вы можете спросить вместо того, чтобы предполагать, что это не связано.
BeastOfCaerbannog avatar
флаг ca
@ 24601 Ну, прямое упоминание о том, что они используют Ubuntu, не является достаточно веской причиной для рассмотрения вопроса как не по теме. Это правда, что вопросы Bash можно задавать и в SO, но их также можно задавать здесь (а также Unix & Linux и Super User!). У нас даже есть значок для вопросов Bash. Как видите, комментарий Бэкона дает прекрасный ответ, совершенно правильный для Ubuntu, точно так же, как и вопрос, даже без явного упоминания Ubuntu.
24601 avatar
флаг in
@BeastOfCaerbannog Я не собираюсь спорить по этому поводу, за исключением того, что скажу, что если вопрос относится к ОС, то, конечно, он относится к теме, в противном случае общие вопросы, не относящиеся к ОС Ubuntu, могут быть вполне адекватно решены в stackoverflow. Тот факт, что кто-то отвечает в комментарии, не является самостоятельным доказательством того, что Q введен правильно в AU. Если у вас есть с этим проблемы, поднимите их в мете — это правильное место для этого.
BeastOfCaerbannog avatar
флаг ca
@ 24601 Что ж, мета-пост, на который я ссылался в своем предыдущем комментарии, на который я также снова ссылаюсь здесь, разъясняет, что общие вопросы сценариев, особенно сценарии Bash, не являются здесь не по теме. Метапост: [Являются ли вопросы по сценариям bash/shell по теме?] (https://meta.askubuntu.com/questions/13807/are-bash-shell-scripting-questions-on-topic)
BeastOfCaerbannog avatar
флаг ca
@ 24601 Также актуально: [Как узнать, принадлежит ли вопрос здесь или, скорее, в stackoverflow/superuser?] (https://meta.askubuntu.com/questions/47/how-do-we-tell-if-a -question-belongs-here-or-rather-at-stackoverflow-superuser) и [Являются ли «не только специфичные для Ubuntu» вопросы по теме?](https://meta.askubuntu.com/questions/14523 /есть-не-только-убунту-конкретные-вопросы-по-теме)
24601 avatar
флаг in
@BeastOfCaerbannog Я не изменил своего мнения на основе этой ссылки, извините.
terdon avatar
флаг cn
@24601 Областью применения этого сайта является _все, что можно сделать на компьютере с Ubuntu_. Это 100% по теме. Общие вопросы, не относящиеся к Ubuntu, составляют подавляющее большинство того, с чем мы здесь имеем дело. Есть очень, очень мало вещей, которые на самом деле специфичны для Ubuntu. Кроме того, большинство из них, включая этот вопрос, не будут в теме [so], которая касается только вопросов программирования. Пожалуйста, найдите время, чтобы понять возможности сайта, прежде чем предлагать что-то не по теме.
waltinator avatar
флаг it
Вы читали `man ps`? Откуда вы взяли `--ppid`? `ps -o PPID $1`, чтобы получить родителя `$1`.
A. Herlas avatar
флаг bz
вы ищете `pstree -p $pid`, тогда вам нужно выяснить, как извлечь информацию.
Рейтинг:1
флаг it

Вот дизайн метаязыка (не реализован, не протестирован, следует предположить, что он не работает). Фактическое кодирование остается в качестве упражнения для студента.

В битьсценарий (начиная с #!/бин/баш):

Определите ppid функция, принимающая PID в качестве параметра и возвращающая родителя PID.

Определите дети функция, принимающая PID в качестве параметра и возвращающая список, разделенный пробелами ("pid pid pid " обратите внимание на конечный пробел) PID, у которых параметр PID является родителем. Проверьте ВСЕ PID в системе, используя ppid функция.

начальный ПИД=$1
дочерний список="$(дети $startPID)"
список дочерних элементов = ""
список дочерних элементов = ""
для ребенка в $childlist ; делать
    gchildlist="$gchildlist $(дети $ребенок)"
сделано
для ребенка в $gchildlist ; делать
    ggchildlist="$ggchildlist $(дети $ребенок)"
сделано
echo "Великий: $gchildlist"
echo "Ggrand: $ggchildlist"

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.