如何在Linux中监视子进程状态

时间:2018-02-21 13:32:07

标签: c++ linux process posix

我有一个控制服务,它的功能是管理系统中的另一个进程。我必须运行此过程,如果它意外关闭则重新运行它,并在用户请求时手动关闭它。

请告诉我如何在Linux中执行此操作?我应该保存子进程PID并定期检查其状态吗?我可以注册一些系统事件,如果应用程序运行状态已更改,将通知我?

提前致谢。

1 个答案:

答案 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)