The tantalizing aroma of svcs(1)
A side point: svcs
(1) is pretty fast. Our example from last week was
$ svcs *milestone* STATE STIME FMRI online Jul_23 svc:/milestone/devices:default online Jul_23 svc:/milestone/single-user:default online Jul_23 svc:/milestone/name-services:default online Jul_23 svc:/milestone/multi-user:default online Jul_23 svc:/milestone/multi-user-server:default
Other approaches to service management in Unix-like systems ask each service for their status. On a large system, with a complete representation of its running daemons as services, this can be thousands of fork
(2)/exec
(2) pairs. That’s not how smf
(5) works, and so a command like svcs
(1) can be quick:
$ time svcs *milestone* STATE STIME FMRI online Jul_23 svc:/milestone/devices:default online Jul_23 svc:/milestone/single-user:default online Jul_23 svc:/milestone/name-services:default online Jul_23 svc:/milestone/multi-user:default online Jul_23 svc:/milestone/multi-user-server:default real 0m0.027s user 0m0.004s sys 0m0.009s
In fact, we’re not even calling fork
(2) to get this report on service status:
$ truss -t fork,write,exit svcs *milestone* STATE STIME FMRI write(1, " S T A T E ".., 29) = 29 online Jul_23 svc:/milestone/devices:default write(1, " o n l i n e ".., 55) = 55 online Jul_23 svc:/milestone/single-user:default write(1, " o n l i n e ".., 59) = 59 online Jul_23 svc:/milestone/name-services:default write(1, " o n l i n e ".., 61) = 61 online Jul_23 svc:/milestone/multi-user:default write(1, " o n l i n e ".., 58) = 58 online Jul_23 svc:/milestone/multi-user-server:default write(1, " o n l i n e ".., 65) = 65 _exit(0)
I’ll start drawing a suitable architecture diagram…