Skip to content

Latest commit

 

History

History

singleton

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 

echoloop

Данная задача была предложена в виде вступительного испытания на Межфакультетскую кафедру теоретической и прикладной информатики МФТИ.

Условие задачи

Напишите простое приложение-singleton echoloop. Само приложение выводит раз в секунду переданные ему параметры.

> echoloop "test text"
test text
test text
test text
...

При попытке повторного запуска новое приложение должно обнаружить, что экземпляр уже запущен, отправить свои параметры в ранее запущенное приложение и завершиться, сообщив об этом. Запущенное приложение после этого должно печатать и свои, и полученные параметры.

> echoloop "test1" &
test1
test1
> echoloop "test2"
echoloop for "test2" finished!
test1
test2
test1
test2
...

Как начать

Данная программа была написана на языке программирования Golang. Для поддержки Golang терминалом следует скачать бинарные файлы по ссылке: https://golang.org/dl/

Решение

Изначально был создан mutex файл, который проверяет уникальность процесса.

Используя функцию FcntlFlock, устанавливаем блокировку на запись для mutex файла. Если исполняемый файл был запущен не первым, то его аргументы передаются в fifo файл, сам он завершается.

Далее создается и открывается глобальный fifo файл.

Приложение отлавливает сигналы os.Kill и os.Interrupt. В случае получения сигнала приложение закрывает и удаляет все ненужные файлы, и завершает работу.

Печать аргументов происходит в отдельной goroutine, связь с которой обеспечивается с помощью канала.

Основная goroutine находится в ожидании поступления аргументов из глобального fifo файла.

Автор