В Linux вы можете использовать pgrep
, чтобы получить PID вероятных подозреваемых, и проверить первый аргумент этих PID (доступный в /proc/$PID/cmdline
). /proc/$PID/cmdline
имеет все аргументы (включая аргумент 0) процесса, разделенные ASCII NUL (\0
).
Что-то вроде:
pgrep bash | xargs -I {} sed -nz '2{p; q}' /proc/{}/cmdline | grep -Fqzx "$0"
Это предполагает, что ваши sed
и grep
поддерживают строки, разделенные нулями. sed
печатает вторую строку соответствующих файлов cmdline
(аргумент 1), которая будет именем сценария. Затем grep
ищет точное соответствие имени вашего сценария. Можно выполнить полное совпадение в sed
, но мне не хочется жонглировать кавычками.
Это не сработает, если вы вызываете свой скрипт по разным путям:
/home/user/myscript
cd /home; usr/myscript
myscript
Однако это должно быть безопасно для пробелов в именах скриптов.