иногда мне нужно следить за процессом, и я всегда нахожу bash-script, делающий pid=$1
. Насколько я понимаю, он должен получить идентификатор процесса, который я отправил в первый экземпляр оболочки, который я создал, который запускает этот конкретный процесс, и я мог бы использовать его позже (например, чтобы убить его или использовать память или другое). pid=$0
должен получить текущий экземпляр (bash) и pid=$!
последний. (Пожалуйста, поправьте если я ошибаюсь)Правильно получить идентификатор процесса
Проблема: каждый раз, когда мне нужно запустить pid=$1
команду, pid
ничего не получает и echo $pid
или echo ${pid}
отпечатки и пустую строку, я всегда нужно фантазии способ сделать это с помощью pid=$!
вместо этого, поскольку это единственное, что получает мой идентификатор процесса. Кто-нибудь знает, почему такое поведение моих терминалов? (Это происходит либо в Linux Mint или в Fedora)
'$ 0' и' $ 1' получают позиционные параметры, подаваемые на скрипт (или функцию). Для того, чтобы те были PID, скрипту/функции нужно было бы передать PID в качестве аргументов. О, и '$ 0', вероятно, никогда не будет PID, потому что обычно это имя скрипта/функции - аргументы возбуждения начинаются с' $ 1' ... – twalberg
@twalberg Работает ли он только в файле сценария? Я имею в виду, если я попытаюсь запустить его непосредственно на терминале, разве это не должно работать? – rafa
Как правило, оболочка, запущенная в вашем терминале, вызывается без аргументов, поэтому '$ 1' будет пустым, а' $ 0' будет содержать только имя вашей оболочки. Возможно, вы использовали 'set', чтобы изменить это в какой-то момент, так что проверьте все, например. 'echo '$ 1" 'и т. д. – twalberg