init/main.go

59 lines
1.2 KiB
Go
Raw Normal View History

2021-11-29 01:12:29 +00:00
package main
2021-11-29 21:12:52 +00:00
import (
"fmt"
"os"
)
2021-11-29 01:12:29 +00:00
func main() {
2021-11-29 21:12:52 +00:00
inittab := DefaultInitTab
if file, err := os.OpenFile("/etc/inittab", os.O_RDONLY, 0644); err == nil {
2021-11-29 21:12:52 +00:00
inittab = ParseInitTab(file)
err := file.Close()
if err != nil {
2021-11-29 22:08:39 +00:00
fmt.Printf("error closing inittab: %s\n", err)
2021-11-29 21:12:52 +00:00
}
2021-11-29 22:08:39 +00:00
} else {
fmt.Printf("error reading inittab: %s\n", err)
2021-11-29 21:12:52 +00:00
}
2021-11-29 22:08:39 +00:00
for _, entry := range inittab.Entries(SysInit) {
err := Exec(entry)
if err != nil {
fmt.Printf("error running sysinit \"%s\": %s\n", entry.Process, err)
}
}
for _, entry := range inittab.Entries(Wait) {
err := Exec(entry)
if err != nil {
fmt.Printf("error running wait \"%s\": %s\n", entry.Process, err)
}
}
for _, entry := range inittab.Entries(Once) {
_, err := Spawn(entry)
if err != nil {
fmt.Printf("error running once \"%s\": %s\n", entry.Process, err)
}
}
// TODO implement AskFirst handling
for _, entry := range inittab.Entries(Respawn) {
go func(entry InitTabEntry) {
for {
err := Exec(entry)
if err != nil {
fmt.Printf("error running respawn \"%s\": %s\n", entry.Process, err)
break
}
}
}(entry)
}
// TODO implement Shutdown, Restart and CtrlAltDel handling
select {}
2021-11-29 01:12:29 +00:00
}