我有一个控制服务,它的功能是管理系统中的另一个进程。我必须运行此过程,如果它意外关闭则重新运行它,并在用户请求时手动关闭它。
请告诉我如何在Linux中执行此操作?我应该保存子进程PID并定期检查其状态吗?我可以注册一些系统事件,如果应用程序运行状态已更改,将通知我?
提前致谢。
答案 0 :(得分:1)
我应该保存子进程PID并定期检查其状态吗?
不,如果孩子退出,父母将收到信号declare @t table (Property varchar(20), Room varchar(20), Season varchar(20), DateFrom date, DateTo date, Name varchar(20));
insert into @t values
('ABC LTD','DLX','P','01-01-2018','01-03-2018','John')
, ('XYZ LTD','SUP','P','01-01-2018','01-05-2018','Alan');
declare @dateRange table (dt date primary key);
declare @minDate date = (select min(datefrom) from @t);
declare @maxDate date = (select max(dateto) from @t);
with dates as
(
select @minDate as dt
union all
select DATEADD(day, 1, dt)
from dates
where dt < @maxDate
)
insert into @dateRange
select dt from dates option (maxrecursion 10000);
select t.Property, t.Room, t.Season, d.dt as [Date], t.Name
from @t t
join @dateRange d
on d.dt >= t.DateFrom
and d.dt <= t.DateTo
order by t.Property, t.Room, d.dt;
,因此您可以安装信号处理程序以对此事件作出反应。
有关如何安装信号处理程序,请参阅sigaction(2),有关信号的一般信息,请参阅signal(7)。