LINUX.ORG.RU

Как запустить скрипт, чтобы он «убил себя»?

 


0

1

Точней, убил порожденный этим скриптом процесс.

Допустим, скрипт foo просто запускает в фоне другую программу

the_prog&

Надо чтобы foo не висел в процессах. Что надо добавить в foo чтобы так было?

Насколько я понял, надо как то получить PID, и грохнуть его kill'ом? Как это сделать? Или как то по-другому?

Попробуй

the_prog&
disown -a
exit

Kroz ★★★★★
()

можно положить в /tmp

anonymous
()

Если это последнее, что делает скрипт, то нужно запускать с помощью exec. Если хочешь просто отвязать от родителя, то используй setsid

surefire ★★★
()

Можно как-нибудь так:

#!/bin/bash

PIDFILE=$(tempfile -s.pid)

# Запускаем
(echo $BASHPID > "$PIDFILE" ; exec background_job) &

# Работаем
sleep 10

# Убиваем
kill $(< "$PIDFILE")
rm -- "$PIDFILE"

uCore
()
Ответ на: комментарий от uCore

ты можешь получить пид родителя/потомка на си, если ты об этом

Nuna
()
Ответ на: комментарий от Nuna

Никогда не любил такой способ блокировки «одни раз не PIDраз».
Надёжней и самое главное проще использовать какой нибудь flock.

Но всё это не нужно, когда есть systemd.

surefire ★★★
()
Ответ на: комментарий от Nuna

flock или pid?

Если про pid.. то кроме записи еще много скользкой работы вокруг, проверить есть ли файл, что там записано, а есть ли такой процесс на самом деле.

С эксклюзивной блокировкой всё проще. Либо смог заблокировать, либо нет. Так или иначе блокировка есть на всех системах. Если процесс рухнет или его прибью, то блокировка снимается автоматически.

surefire ★★★
()
Ответ на: комментарий от Nuna

Я админ локалхостов и еще чуть-чуть. Там, где надо он есть, нет только на embedded устройствах. Ну и ладно, я не пропаду.

surefire ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.