diff options
| author | danielflira <danielflira@gmail.com> | 2021-06-20 02:48:46 -0300 |
|---|---|---|
| committer | danielflira <danielflira@gmail.com> | 2021-06-20 02:48:46 -0300 |
| commit | f1d207a0fe9b567c2b8f899d2cabe655673ddb16 (patch) | |
| tree | ea2f72c88a7415409d8ad9744d6771b175eed64f | |
| parent | b3eb4fecc7cdad0388e05fe54ab38b68df00c65c (diff) | |
| download | seaweedfs-f1d207a0fe9b567c2b8f899d2cabe655673ddb16.tar.xz seaweedfs-f1d207a0fe9b567c2b8f899d2cabe655673ddb16.zip | |
start weed with mount in background
| -rw-r--r-- | weed/command/fuse.go | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/weed/command/fuse.go b/weed/command/fuse.go index 74cf2bb70..b66487bdf 100644 --- a/weed/command/fuse.go +++ b/weed/command/fuse.go @@ -22,6 +22,7 @@ func runFuse(cmd *Command, args []string) bool { rawArgsLen := len(rawArgs) option := strings.Builder{} options := []parameter{} + masterProcess := true // first parameter i := 0 @@ -98,6 +99,8 @@ func runFuse(cmd *Command, args []string) bool { parameter := options[i] switch parameter.name { + case "child": + masterProcess = false case "arg0": mountOptions.dir = ¶meter.value case "filer": @@ -187,6 +190,27 @@ func runFuse(cmd *Command, args []string) bool { } } + // the master start the child, release it then finish himself + if masterProcess { + arg0 := os.Args[0] + argv := append(os.Args, "-o", "child") + + attr := os.ProcAttr{} + child, err := os.StartProcess(arg0, argv, &attr) + + if err != nil { + panic(fmt.Errorf("master process can not start child process: %s", err)) + } + + err = child.Release() + + if err != nil { + panic(fmt.Errorf("master process can not release child process: %s", err)) + } + + return true + } + // I don't know why PATH environment variable is lost if err := os.Setenv("PATH", "/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin"); err != nil { panic(fmt.Errorf("setenv: %s", err)) |
