Если ваш find
не имеет этой опции, метод, который работает в UNIX с 70-х годов:
ls -ls file
который напечатает фактическое число использованных блоков и самый старший из когда-либо записанных байт. Исходя из этого, вы можете легко вычислить, сколько блоков на самом деле не было выделено.
kill -9 $(pgrep -f ${BASH_SOURCE[0]} | grep -v $$)
Очень просто.
Использует pgrep для поиска всех экземпляров текущего запущенного скрипта.
pgrep удобен тем, что возвращает только pid.
Затем извлеките текущий запущенный pid с помощью $$, чтобы избежать самоубийства.
Наконец kill -9 завершает предыдущие экземпляры.
kill -9 $ (pgrep -f ${BASH _SOURCE[0]} | grep -v $$)
Очень просто. Использует pgrep для поиска всех экземпляров текущего запущенного скрипта. pgrep удобен тем, что возвращает только pid. Затем вытащите текущий запущенный pid, чтобы он не покончил с собой. Наконец kill -9 завершает предыдущие экземпляры.
Вы можете использовать $0
вместо ${BASH_SOURCE[0]}
.
Мне пришлось использовать pgrep -f <filename>
вместо pidof -x <filename>
, потому что последний по какой-то причине ничего не возвращал.
Кроме того, kill -9
здесь не нужен.
Итак, результат (, вдохновленный ответом @jcbermy):
#!/bin/bash
for pid in $(pgrep -f $0); do
if [ $pid != $$ ]; then
kill $pid
fi
done