Как обернуть исполняемый файл в UNIX (SunOS), чтобы он никогда не запускался более одного раза одновременно? - PullRequest
2 голосов
/ 05 мая 2010

У меня есть исполняемый файл (без исходного кода), который мне нужно обернуть, чтобы он не вызывался более одного раза за раз. Я сразу думаю о какой-то оболочке очереди, но как мне на самом деле сделать так, чтобы моя оболочка вызывалась вместо самого исполняемого файла? Есть лучший способ сделать это? Решение должно быть невидимым, поскольку пользователи являются другими приложениями. Любая информация / рекомендации приветствуются.

Ответы [ 2 ]

1 голос
/ 05 мая 2010

Способ 1. Поместите исполняемый файл в какое-то место, отличное от стандартного пути. Создайте сценарий оболочки, который проверяет файл стража и, если файл стража отсутствует, запускает программу, ожидает завершения выполнения программы и затем удаляет файл стража. Если присутствует сторожевой файл, сценарий войдет в цикл с короткой задержкой (1 секунда? Как долго выполняется стандартное выполнение этой программы? Возьмите это и половину), снова проверьте файл предложения и т. Д.

Метод 2: Создайте отдельную программу, которая делает то же самое, что и скрипт, но вместо этого использует семафор или блокировку системного уровня. Вы можете даже использовать блокировку чтения / записи для файла. Программа будет выполнять fork () и exec () для реальной программы, ожидая выхода дочернего элемента перед очисткой часового.

1 голос
/ 05 мая 2010

Если пользователи других приложений, вы можете просто переименовать исполняемый файл (например, name -> name.real) и вызвать оболочку с исходным именем. Чтобы убедиться, что он вызывается только один раз за раз, вы можете использовать команду pidof (например, pidof name.real), чтобы проверить, запущена ли программа уже (pidof фактически дает вам PID запущенного процесса, так что Вы можете использовать такие вещи, как kill или что-либо еще для отправки сигналов на него).

...