Linux прекратить выполнение скрипта

Содержание
  1. Как прервать выполнение процесса в скрипте
  2. Re: Как прервать выполнение процесса в скрипте
  3. Re: Re: Как прервать выполнение процесса в скрипте
  4. Re: Re: Re: Как прервать выполнение процесса в скрипте
  5. Re: Re: Re: Re: Как прервать выполнение процесса в скрипте
  6. Re: Re: Re: Re: Как прервать выполнение процесса в скрипте
  7. Re: Re: Re: Re: Re: Как прервать выполнение процесса в скрипте
  8. Re: Re: Re: Re: Re: Re: Как прервать выполнение процесса в скрипте
  9. Re: Как прервать выполнение процесса в скрипте
  10. Re: Re: Как прервать выполнение процесса в скрипте
  11. Re: Re: Re: Как прервать выполнение процесса в скрипте
  12. Re: Как прервать выполнение процесса в скрипте
  13. Re: Re: Как прервать выполнение процесса в скрипте
  14. Re: Re: Re: Как прервать выполнение процесса в скрипте
  15. Re: Re: Re: Re: Как прервать выполнение процесса в скрипте
  16. Re: Re: Re: Re: Re: Как прервать выполнение процесса в скрипте
  17. Re: Re: Re: Re: Re: Re: Как прервать выполнение процесса в скрипте
  18. Re: Re: Как прервать выполнение процесса в скрипте
  19. Re: Re: Re: Re: Re: Re: Re: Как прервать выполнение процесса в скрипте
  20. Re: Re: Re: Re: Re: Re: Re: Re: Как прервать выполнение процесса в скрипте
  21. Re: Re: Re: Re: Re: Re: Re: Re: Как прервать выполнение процесса в скрипте
  22. Команда exit в Bash и коды выхода
  23. Статус выхода
  24. Команда exit
  25. Примеры
  26. Выводы

Как прервать выполнение процесса в скрипте

Как прервать выполнение процесса в скрипте, как по Ctrl+C ?

Re: Как прервать выполнение процесса в скрипте

man 1 kill если надо точно также как по Ctrl+C, то по этому сочетанию процессу посылаеться сигнал SIGINT, тоесть сигнал №3 Тогда соответственно или

то есть группе процессов, так как Ctrl+C посылает сигнал не одному процессу,а группе

Re: Re: Как прервать выполнение процесса в скрипте

Немного не так поставил вопрос. Скрипт запускает процесс на выполнение. И соответственно пока он не остановиться, невозможно выполнить следующую команду. Как его остановить?

Re: Re: Re: Как прервать выполнение процесса в скрипте

Поправлюсь:
Немного не так поставил вопрос. Скрипт запускает процесс на выполнение. И соответственно пока этот процесс не остановиться, невозможно выполнить следующую команду в скрипте. Как его остановить?

Re: Re: Re: Re: Как прервать выполнение процесса в скрипте

> Скрипт запускает процесс на выполнение. И соответственно пока этот процесс не остановиться, невозможно выполнить следующую команду в скрипте. Как его остановить?

А зачем запускать процесс, который вообще не нужен (ты ж его сразу грохать «как по ^C» собрался)?

Читайте также:  Astra linux postgresql contrib

Re: Re: Re: Re: Как прервать выполнение процесса в скрипте

а потом если захочешь его убить

Re: Re: Re: Re: Re: Как прервать выполнение процесса в скрипте

>>А зачем запускать процесс, который вообще не нужен (ты ж его сразу грохать «как по ^C» собрался)?

Чего то меня последнее время напрягаю вопросы типа «А зачем»

Может ему этот процесс надо на пару секунд

Re: Re: Re: Re: Re: Re: Как прервать выполнение процесса в скрипте

> Чего то меня последнее время напрягаю вопросы типа «А зачем» Может ему этот процесс надо на пару секунд

А в твоем примере PID=$1 или PID=$! ?

А kill -9 или kill -2 (SIGINT)?

А твоя фамилия не Ностердамус?

Re: Как прервать выполнение процесса в скрипте

форкнуться на два процесса парент-чайлд, потом следить по таймаутам, например, чего и как. Или сделать 2 канала (парент-чайлд и чайлд-парент) между процессами для обмена информацией.

Re: Re: Как прервать выполнение процесса в скрипте

Этот процесс не работает в фоне. 🙁

Re: Re: Re: Как прервать выполнение процесса в скрипте

>>Этот процесс не работает в фоне. 🙁

Он читает что-то с терминала?

Re: Как прервать выполнение процесса в скрипте

Ты что, издеваешься, или решил в «Что?Где?Когда?» поиграть?

Сформулируй, наконец, свой вопрос.

Re: Re: Как прервать выполнение процесса в скрипте

Togda esli znaesh kak on budet nazyvat'sya mozhno sdelat' tak: #/bin/tcsh sleep 2; kill -9 `ps aux | grep my_process | awk ` & my_process No togda kill ub'et _VSE_ processy gde budet vstrechat'sya imya tvoego processa.

Re: Re: Re: Как прервать выполнение процесса в скрипте

>>No togda kill ub’et _VSE_ processy gde budet vstrechat’sya imya tvoego processa.

Ну тогда сразу killall -9 my_process, чего мелочиться!! 😉

Кстати, никто не пробывал посылать из под рута SIGKILL иниту?

Re: Re: Re: Re: Как прервать выполнение процесса в скрипте

> Кстати, никто не пробывал посылать из под рута SIGKILL иниту?

Стандартный вопрос «на засыпку» 🙂

Можешь смело посылать, ничего не будет: init не имеет обработчиков сигналов.

Re: Re: Re: Re: Re: Как прервать выполнение процесса в скрипте

> init не имеет обработчиков сигналов. сорри, чувствую себя полным занудой, но не могу не поправить :) у init'а есть обработчики сигналов, но -9 его действительно не потревожит. потому, что в linux для процесса с pid == 1 SIG_DFL означает SIG_IGN. см kernel/signal.c:get_signal_to_deliver() вот эти строчки: /* Init gets no signals it doesn't want. */ if (current->pid == 1) continue;

Re: Re: Re: Re: Re: Re: Как прервать выполнение процесса в скрипте

Странно. Может, это — новый Деним Торнадо Автешейв?

Читайте также:  Linux посмотреть зависимости пакета

У меня в linux-2.4.19.SuSE/kernel/ никакого упоминания о get_signal_to_deliver не содержится.

С другой стороны, man 2 kill:

It is impossible to send a signal to task number one, the init process, for which it has not installed a signal handler. This is done to assure the system is not brought down accidentally.

Re: Re: Как прервать выполнение процесса в скрипте

Спасибо всем, вроде немного разобрался.

Re: Re: Re: Re: Re: Re: Re: Как прервать выполнение процесса в скрипте

> Странно. Может, это -- новый Деним Торнадо Автешейв? а что это такое? > У меня в linux-2.4.19.SuSE/kernel/ никакого упоминания > о get_signal_to_deliver не содержится. это в 2.6, в 2.4 это в arch/i386/kernel/signal.c:do_signal(): if (ka->sa.sa_handler == SIG_DFL) < /* Init gets no signals it doesn't want. */ if (current->pid == 1) continue; > It is impossible to send a signal to task number one, the > init process, for which it has not installed a signal handler. послать можно, но доставлен он не будет. ~$ perl -e 'kill 9, 1 or die "$!\n"' Operation not permitted ~$ su - Password: ~# perl -e 'kill 9, 1 or die "$!\n"' ~# собственно, что я придрался к тому, что: > init не имеет обработчиков сигналов. он, конечно, имеет. как минимум, SIGCHLD

Re: Re: Re: Re: Re: Re: Re: Re: Как прервать выполнение процесса в скрипте

> послать можно, но доставлен он не будет. точнее, он даже будет доставлен в том смысле, что init будет прерван/разбужен, но SIG_DFL, повторю, превращается в SIG_IGN.

Re: Re: Re: Re: Re: Re: Re: Re: Как прервать выполнение процесса в скрипте

>собственно, что я придрался к тому, что:

>> init не имеет обработчиков сигналов.

Ну, я никогда в ядро на эту тему не лазил, просто верил цитированным строчкам из мануала:

> . for which it has not installed a signal handler.

Чой-то я не могу найти исходников init’а.

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

if (ka->sa.sa_handler == SIG_DFL)

/* Init gets no signals it doesn’t want. */

Наверное, это и имеется в виду: init имеет только те обработчики, которые САМ выставил.

>> Странно. Может, это — новый Деним Торнадо Автешейв?

Бессмертные строчки из рекламы лосьона посте бритья!

Источник

Команда exit в Bash и коды выхода

Часто при написании сценариев Bash вам необходимо завершить сценарий при выполнении определенного условия или выполнить действие на основе кода выхода команды.

Читайте также:  Делает команда cat linux

В этой статье мы рассмотрим встроенную команду exit Bash и статусы выхода выполненных команд.

Статус выхода

Каждая команда оболочки возвращает код выхода, когда она завершается успешно или безуспешно.

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

Специальная переменная $? возвращает статус выхода последней выполненной команды:

Команда date завершена успешно, код выхода равен нулю:

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

ls /nonexisting_dir &> /dev/nullecho $?

Код состояния можно использовать для выяснения причины сбоя команды. На странице руководства каждой команды содержится информация о кодах выхода.

При выполнении многокомандного конвейера статус выхода конвейера соответствует состоянию последней команды:

sudo tcpdump -n -l | tee file.outecho $?

В приведенном выше примере echo $? напечатает код выхода команды tee .

Команда exit

Команда exit закрывает оболочку со статусом N Он имеет следующий синтаксис:

Если N не задано, код состояния выхода — это код последней выполненной команды.

При использовании в сценариях оболочки значение, указанное в качестве аргумента команды exit возвращается оболочке как код выхода.

Примеры

Статус выхода команд может использоваться в условных командах, таких как if . В следующем примере grep завершит работу с нулем (что означает истину в сценариях оболочки), если «строка поиска» найдена в filename :

if grep -q "search-string" filename then echo "String found." else echo "String not found." fi 

При запуске списка команд, разделенных && (И) или || (ИЛИ), статус выхода команды определяет, будет ли выполнена следующая команда в списке. Здесь команда mkdir будет выполнена, только если cd вернет ноль:

cd /opt/code && mkdir project

Если сценарий завершается exit без указания параметра, код выхода из сценария — это код последней команды, выполненной в сценарии.

#!/bin/bash echo "doing stuff. " exit 

Использование только exit — это то же самое, что и exit $? или пропуская exit .

Вот пример, показывающий, как завершить сценарий, если он запущен пользователем без полномочий root:

#!/bin/bash if [[ "$(whoami)" != root ]]; then echo "Only user root can run this script." exit 1 fi echo "doing stuff. " exit 0 

Если вы запустите сценарий как root, код выхода будет нулевым. В противном случае скрипт выйдет со статусом 1 .

Выводы

Каждая команда оболочки возвращает код выхода при завершении. Команда exit используется для выхода из оболочки с заданным статусом.

Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.

Источник

Оцените статью
Adblock
detector