2013-08-27 2 views
4

$! существует в сценарии bash/shell, если да, сообщите, для чего он используется. И почему он пуст, когда echo $! запущен в командной строке?

+0

Также см. [Что означает $$ или $! в bash?] (http://stackoverflow.com/questions/13671750/what-does-mean-or-in-bash/) – devnull

+0

Мне интересно, почему это было выше, чем downvoted (и закрыто), и это заслуживает * upvotes *! – devnull

ответ

5

В дополнении к другому ответу, это эхо

echo $! 

Напечатает пустым, если вы еще не запустить любой процесса в фоновом режиме в текущей оболочке. Если теперь запустить:

date & 
echo $! 

Тогда он будет печатать что-то подобное (то есть идентификатор процесса последнего выполненного фонового процесса):

47833 
4

$! является PID последней программы вашей оболочка побежала в фоновом режиме

+0

Любая идея, как она получает PID последнего фонового процесса, который был убит или завершен? – pRAShANT

+2

@pRAShANT Нет простого способа. Вы могли бы просто записывать все процессы, которые вы использовали, используя тип массива по вашему выбору, а затем использовать обработчик ловушки SIGCHLD, который запускается каждый раз, когда процесс завершается/убивается, а затем проверяет, какой процесс больше не существует. Метод просто не является точным, особенно если оба процесса одновременно прекращены. Проверка того, что процессы все еще существуют с помощью '/ proc',' kill -s 0' и т. Д., Также замедляется. И я не уверен, что управление процессами через контроль работы всегда выполнимо или эффективно, что оно ничего не пропустит. – konsolebox

0

$! - показывает последний идентификатор процесса, который запустился в фоновом режиме.

Смежные вопросы