Стандартным решением Unix для этого является создание «файла запуска». При запуске вы пытаетесь создать этот файл и записать в него свой pid, если он не существует; если он существует, прочитайте из него pid, и если есть работающая программа с этим pid и именем вашего процесса, подождите/выйдите/что угодно.
Вопрос в том, куда вы помещаете этот файл и как вы его называете?
Ну, во-первых, вы должны решить, что именно означает «уже работает». Очевидно, не «где угодно в мире», но это может быть что угодно, от «где угодно на текущей машине» до «в текущем сеансе рабочего стола». (Например, если пользователь А запускает вашу программу, приостанавливает ее, затем появляется пользователь Б и берет на себя управление компьютером с помощью быстрого переключения пользователей, должен ли он запускать программу или нет?)
Практически для любого разумного ответа на этот вопрос существует очевидный шаблон имени пути. Например, на Mac /tmp является общим для всей системы, а $TMPDIR зависит от конкретного сеанса, поэтому, например, /tmp/${ARGV[0]}.pid — это хороший способ сказать «только один копировать на машину, точка", а ${TMPDIR}/${ARGV[0]}.pid - хороший способ сказать "только одна копия за сеанс".
person
abarnert
schedule
31.05.2012