github.hscsec.cn/u-root/u-root@v7.0.0+incompatible/cmds/core/shutdown/shutdown.go (about)

     1  // Copyright 2015-2017 the u-root Authors. All rights reserved
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  // shutdown halts, suspends, or reboots.
     6  //
     7  // Synopsis:
     8  //     shutdown [-h|-r|halt|reboot|suspend]
     9  //
    10  // Description:
    11  //     current operations are reboot (-r), suspend, and halt [-h].
    12  //
    13  // Options:
    14  //     -r|reboot:	reboot the machine.
    15  //     -h|halt:		halt the machine.
    16  //     -s|suspend:	suspend the machine.
    17  package main
    18  
    19  import (
    20  	"log"
    21  	"os"
    22  
    23  	"golang.org/x/sys/unix"
    24  )
    25  
    26  var (
    27  	opcodes = map[string]uint{
    28  		"halt":    unix.LINUX_REBOOT_CMD_POWER_OFF,
    29  		"-h":      unix.LINUX_REBOOT_CMD_POWER_OFF,
    30  		"reboot":  unix.LINUX_REBOOT_CMD_RESTART,
    31  		"-r":      unix.LINUX_REBOOT_CMD_RESTART,
    32  		"suspend": unix.LINUX_REBOOT_CMD_SW_SUSPEND,
    33  		"-s":      unix.LINUX_REBOOT_CMD_SW_SUSPEND,
    34  	}
    35  	reboot = unix.Reboot
    36  )
    37  
    38  func usage() {
    39  	log.Fatalf("shutdown [-h|-r|-s|halt|reboot|suspend] (defaults to halt)")
    40  }
    41  
    42  func main() {
    43  	if len(os.Args) == 1 {
    44  		os.Args = append(os.Args, "halt")
    45  	}
    46  	op, ok := opcodes[os.Args[1]]
    47  	if !ok || len(os.Args) > 2 {
    48  		usage()
    49  	}
    50  	if err := reboot(int(op)); err != nil {
    51  		log.Fatalf(err.Error())
    52  	}
    53  }