blob: 4827588b81e10fffd8b6f6889f5ed6a9da14c7e9 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package utils
import (
"fmt"
"io/ioutil"
"os"
"strconv"
)
// WritePID write pid to the given file path.
func WritePID(filepath string, forceStart bool) error {
if pid, err := ReadPID(filepath); err == nil {
if !forceStart {
return fmt.Errorf("Instance of Manager API maybe running with a pid %d. If not, please run Manager API with '-f' or '--force' flag\n", pid)
}
fmt.Printf("Force starting new instance. Another instance of Manager API maybe running with pid %d\n", pid)
}
pid := os.Getpid()
f, err := os.OpenFile(filepath, os.O_WRONLY|os.O_CREATE|os.O_TRUNC|os.O_CREATE, 0600)
if err != nil {
return err
}
defer f.Close()
if _, err := f.WriteString(strconv.Itoa(pid)); err != nil {
return err
}
return nil
}
// ReadPID reads the pid from the given file path.
func ReadPID(filepath string) (int, error) {
data, err := ioutil.ReadFile(filepath)
if err != nil {
return -1, err
}
pid, err := strconv.Atoi(string(data))
if err != nil {
return -1, fmt.Errorf("invalid pid: %s", err)
}
return pid, nil
}