package oxbow

  1. Overview
  2. Docs
Dynamic window manager for the river Wayland compositor

Install

dune-project
 Dependency

Authors

Maintainers

Sources

v0.1.1.tar.gz
md5=a182e6d368a65e6752771e41e651713f
sha512=020d2c7f9f4e06966ca56695e24eb0b41dd12500aa65d2cd9b56e03068bbb6ea7770de0a33c04f0d054bd474bee8c2b36bb46af86266c9823490e1bd0810c027

doc/src/oxbow.ops/execute.ml.html

Source file execute.ml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
open! Oxbow_core

let exec argv =
  match argv with
  | [||] | [| "" |] -> Error "nothing to execute"
  | _ ->
    let () =
      match Unix.fork () with
      | 0 ->
        (try Unix.setsid () |> ignore with
         | Unix.Unix_error _ ->
           Printf.eprintf "Exec.exec: setsid failed: %S\n"
           @@ String.concat " " (Array.to_list argv));
        (* Ignored signal dispositions survive execvp. The compositor ignores
           SIGCHLD and SIGPIPE; spawned commands must not inherit that
           (an ignored SIGCHLD breaks waitpid in the child, e.g. wl-copy). *)
        Sys.set_signal Sys.sigchld Sys.Signal_default;
        Sys.set_signal Sys.sigpipe Sys.Signal_default;
        (try Unix.execvp argv.(0) argv with
         | _ ->
           Printf.eprintf "Exec.exec: failed to execute: %S\n"
           @@ String.concat " " (Array.to_list argv));
        Stdlib.exit Exit.unavailable
      | _ -> ()
    in
    Ok None
;;

let spawn cmd = exec [| "/bin/sh"; "-c"; cmd |]