Я не уверен, но если вы запускаете исполняемые файлы из Java, вы можете запускать их в отдельных потоках, а затем вы можете отображать их по своему усмотрению - по имени, по номеру строки или чему-то - и регулярно останавливать этот вмещающий поток как java-thread, который не выглядит элегантным решением (не закрывая файлы и т. д.), но может работать до некоторой степени (до тех пор, пока linux-программа не запускает процесс, освобождающийся от его родитель).
Отдельные команды для закрытия каждого процесса, отправляемые через stdin программам, могут быть другой опцией. Как обрабатывать stdin и stdout, а также другие подводные камни упоминаются здесь довольно подробно:
http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html?
Видимые программы могут даже управляться java.awt.Robot (клавиатура, мышь).
В качестве последней идеи я хотел бы рассмотреть возможность использования новой команды "kill pidof program", которая работает на основе имени, чтобы вы не могли различить два экземпляра одной и той же программы.
Я не знаю apache-lib, упомянутого Стином, но обычно есть очень полезные вещи, я бы порекомендовал поискать там тоже - возможно, в первую очередь.