Как я могу обернуть исполняемый файл на Unix (SunOS), чтобы он никогда не беги больше, чем раз в то же время?

StackOverflow https://stackoverflow.com/questions/2768981

Вопрос

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

Это было полезно?

Решение

Метод 1: Поместите исполняемый файл в некотором месте не на стандартном пути. Создайте сценарий Shell, который проверяет файл Sentinel и, если файл Sentinel отсутствует, выполняет программу, ждет ptogram для завершения, затем удаляет файл sentinel. Если файл Sentinel присутствует, скрипт вступит в цикл с коротким задержкой (1 секунду? Как долго это стандартное выполнение этой программы? Возьмите это и половину его), проверьте постоянный файл еще раз и так далее.

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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top