Получение pid скрипта bash от себя

У меня есть сценарий bash с выполнением множества вещей, называемых script.sh :

 #!/bin/bash #It #Is #Doing #Things 

Есть ли способ, которым я могу получить доступ к скрипту, а затем убить его через 5 минут?

  • Петля с двумя переменными в сценарии bash
  • Скрыть историю команд от других пользователей на сервере Linux
  • Перехватывать и изменять команды в сценариях bash
  • причина для exec в сценариях оболочки
  • Bash CD до тех пор, пока в определенной папке
  • Есть ли какая-нибудь утилита или плагин, который включает текущий каталог в истории bash?
  • Подобно:

     #!/bin/bash #Now here give pid of script.sh then kill it after 5 minutes #It #Is #Doing #Things 

    Обновить

    Imagin У меня есть этот скрипт:

     #!/bin/bash while : do echo "line printed" done 

    Если мы используем эти ответы, он не отображает результат …

    Я хочу, чтобы текст был напечатан, и через 5 минут cntrl + c сигнал убьет процесс bash …

    Это хорошая идея?

     PID=$$ kill -SIGINT $PID 

    Где нужно положить?

  • Рекурсивная группировка символических ссылок по исходному файлу
  • Использование вывода команды `grep` как переменной во второй команде
  • Как «отменить» `set -x`?
  • Как предотвратить ввод команд через параметры команды?
  • Что такое переменная среды?
  • Почему `bash -c somecommand` иногда не оставляет процесс bash?
  • 5 Solutions collect form web for “Получение pid скрипта bash от себя”

    Если вы всегда хотите, чтобы сценарий перегрелся через 5 минут, вы можете просто использовать блок в фоновом процессе, подобном этому. Если вы используете Ctrl+C во время его работы, фоновый процесс также завершится:

     #!/bin/bash { sleep 5m kill $$ } & while true do date sleep 1 done 

    Вы получаете PID с PID=$$ .

    То, что вы хотите, может быть легко достигнуто с помощью timeout команды.

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

     (sleep $TIMEOUT && kill "$PID") & 

    Утилита timeout , входящая в состав GNU coreutils, делает это за вас:

     timeout 5m bash script.sh 

    завершит выполнение скрипта через 5 минут выполнения.

    Вы можете изменить свой цикл на:

     #!/bin/bash - while ((SECONDS < 5*60)) do echo "line printed" done 

    Или вставить ((SECONDS < 5*60)) || exit ((SECONDS < 5*60)) || exit в самый глубокий цикл.

    SECONDS в ksh , zsh и bash – это специальные переменные, которые содержат количество секунд с момента запуска оболочки.

    Вы можете использовать условие проверки:

     #!/bin/bash START=$(date +%s) while [[ $(($(date +%s) - $START)) -ne 300 ]] do #do something here done echo QUIT 

    объяснение

    • date +%s получает время в секундах с момента epoch, мы сохраняем его в переменной START , отмечаем время начала скрипта.
    • [[ $(($(date +%s) - $START)) -ne 300 ]] : мы получаем текущее время ( date +%s снова) вычитаем до времени начала (которое сохраняется в переменной START ).
    • Если результат не равен 300 (5 минут), скрипт продолжает работать,
    • Если результат равен 300 , то есть скрипт запускается через 5 minutes с момента запуска, мы завершаем цикл while, заканчивается сценарий.
    Linux и Unix - лучшая ОС в мире.