Суть описана в заголовке. Проблема, как вы уже догадались, в том, что процесс может успешно сдохнуть сам. Сейчас я просто беру pid процесса и засовываю его в файл. Потом делаю kill. И это - ужасно. Демона из него делать не нужно. По идее надо просто чистить файл с pid, если процесс сдох. Но как это сделать, я что-то не догоняю. Если вынести процесс в отдельный скрипт (в котором чистить файл после завершения) то при запуске получишь pid скрипта, а он - не нужен.
Пример
#run.sh
mycoolprocess &
PID=$!
echo $PID > my.pid
#stop.sh
kill $(cat my.pid)
>my.pid
upd: решено через еще один скрипт и убийство этого самого скрипта с потомками.