Как я могу сделать для цикла, начинающего много процессов?

Существуют многочисленные способы начаться, но вот то, что я рекомендую сделать:

  1. Сделайте каталог для хранения сценариев:

    mkdir ~/bin
    
  2. Отредактируйте свой ~/.bashrc (я предполагаю, что Вы знаете, как обработать редактора), и добавьте внизу:

    if [ -d ~/bin ] ; then
       export PATH=~/bin:"${PATH}"
    fi
    
  3. Выход из системы и входит в систему снова (или запускает новый терминал), и проверка, если ~/bin находится в Вашем пути:

    echo $PATH
    
  4. Создайте свою первую программу ~/bin/echo_on_boot и вставленный

    #! /bin/bash
    echo "Started" > /var/tmp/written_on_startup
    
  5. измените полномочия на программе, таким образом, она выполнится:

    chmod 750 ~/bin/echo_on_boot
    
  6. попробуйте программу:

    echo_on_boot
    
  7. проверьте если /var/tmp/written_on_startup был создан и удалите его:

    cat /var/tmp/written_on_startup
    rm -f /var/tmp/written_on_startup
    
  8. отредактируйте свой crontab с crontab -e, добавьте строку (около нижней части обычно), предположив это ~ /home/vamvid (Вы не можете использовать ~ в crontab файле):

     @reboot /home/vamvid/bin/echo_on_boot
    
  9. перезагрузите систему и посмотрите, создается ли файл в/var/tmp.

@reboot не будет работать, если Вы корневой каталог будете, например, на зашифрованном диске как ~/bin каталог затем не доступен после перезагрузки (только, когда Вы входите в систему).

2
14.10.2014, 18:50
2 ответа

Что бы вы ни пытались сделать, наиболее вероятно, лучший подход, но если вы решили, что что-то вроде

while [[ 1 == 1 ]]; do sleep 10000& done

начнет много спит , но это может занять некоторое время, чтобы начать все из них. Когда у вас будет достаточно процессов, просто нажмите Ctrl-C , чтобы выйти из во время цикла.

-121--133850-

Да, я боюсь, что содержимое смонтированных данных подключено к тому месту, где вы ранее были смонтированы. По крайней мере двойной монтаж активного диска в двух местах может привести к определенному повреждению данных.

Итак, ответ заключается в том, что ваш rm успешно удалил файлы в/dev/sdb1. Единственным средством восстановления на данном этапе является восстановление содержимого из резервных копий.

-121--186864-

Можно сделать что-то подобное, чтобы начать процесс с нужным PID.

while true; do bash -c '[[ "$$" == 99999 ]] && echo PID is 99999'; done

Можно дождаться получения требуемого PID и, вероятно, заменить инструкцию echo на все, что действительно необходимо проверить.

Ссылки

будут использоваться один и тот же pid после уничтожения?

EDIT

Почему растет номер PID? Это связано с тем, что вы снова и снова запускаете другой бешеный экземпляр?

Я верю, что то, что вы сказали, это то, что происходит. Это можно было бы проверить просто, как показано ниже.

while true; do bash -c 'echo $$' ; done

Мы можем видеть, что PID продолжают увеличиваться, и с главной страницы bash я вижу, что,

-c последовательностью Если параметр -c присутствует, то команды считываются из последовательность. Если после последовательности есть аргументы, они присваиваются к позиционным параметрам, начиная с $0.

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

2
27.01.2020, 22:05

Что бы вы ни пытались сделать, есть, скорее всего, лучший подход, но если вы определили, что-то вроде

while [[ 1 == 1 ]]; do sleep 10000& done

начнется много спит , но это может занять некоторое время, чтобы начать все из них. Когда у вас будет достаточно процессов, просто нажмите Ctrl-C, чтобы выйти из цикла во время цикла .

1
27.01.2020, 22:05

Теги

Похожие вопросы