     :erlang.unique_integer(modifiers)
   end
 
-  defp convert_time_unit(:native),       do: :native
-  defp convert_time_unit(:seconds),      do: :seconds
-  defp convert_time_unit(:milliseconds), do: :milli_seconds
-  defp convert_time_unit(:microseconds), do: :micro_seconds
-  defp convert_time_unit(:nanoseconds),  do: :nano_seconds
+  defp normalize_time_unit(:native),
+    do: :native
+  defp normalize_time_unit(:seconds),
+    do: :seconds
+  defp normalize_time_unit(:milliseconds),
+    do: :milli_seconds
+  defp normalize_time_unit(:microseconds),
+    do: :micro_seconds
+  defp normalize_time_unit(:nanoseconds),
+    do: :nano_seconds
+  defp normalize_time_unit(unit) when is_integer(unit) and unit > 0,
+    do: unit
 
   # TODO: Warn on Elixir 1.4
-  defp convert_time_unit(erlang)
-      when erlang in [:milli_seconds, :micro_seconds, :nano_seconds] do
-    erlang
-  end
-
-  defp convert_time_unit(other) do
-    raise ArgumentError, "unsupported time unit. Expected :seconds, :milliseconds, " <>
-                         ":microseconds or :nanoseconds, got #{inspect other}"
+  defp normalize_time_unit(erlang_unit)
+      when erlang_unit in [:milli_seconds, :micro_seconds, :nano_seconds] do
+    erlang_unit
+  end
+
+  defp normalize_time_unit(other) do
+    raise ArgumentError,
+      "unsupported time unit. Expected :seconds, :milliseconds, " <>
+      ":microseconds, :nanoseconds, or a positive integer, " <>
+      "got #{inspect other}"
   end
 end

  unless an absolute path is given.

  `args` must be a list of binaries which the executable will receive
  as its arguments as-is. This means that

    * Environment variables will not be interpolated.
    * Wildcard expansion will not happen (unless `Path.wildcard/2` is used explicitly).
    * Arguments do not need to be escaped or quoted for shell safety.

  This function returns a tuple containing the collected result
  and the command exit status.

    * `os_time/0` - the time reported by the OS. This time may be
      adjusted forwards or backwards in time with no limitation;

    * `system_time/0` - the VM view of the `os_time/0`. The system time and OS
      time may not match in case of time warps although the VM works towards
      aligning them. This time is not monotonic (i.e., it may decrease)
      as its behaviour is configured [by the VM time warp
      mode](http://erlang.org/doc/apps/erts/time_correction.html#Time_Warp_Modes);

    * `monotonic_time/0` - a monotonically increasing time provided
      by the Erlang VM.

  The time functions in this module work in the `:native` unit
  (unless specified otherwise), which is OS dependent. Most of
  the time, all calculations are done in the `:native` unit, to
  avoid loss of precision, with `convert_time_unit/3` being
  invoked at the end to convert to a specific time unit like
  milliseconds or microseconds. See the `t:time_unit/0` type for
  more information.

  For a more complete rundown on the VM support for different
