diff --git a/src/os_unix.c b/src/os_unix.c
index b4921e3..7eb4e71 100644
--- a/src/os_unix.c
+++ b/src/os_unix.c
@@ -5045,11 +5045,17 @@
     int		fd_out[2];	/* for stdout */
     int		fd_err[2];	/* for stderr */
     channel_T	*channel = NULL;
+    int		use_null_for_in = options->jo_io[PART_IN] == JIO_NULL;
+    int		use_null_for_out = options->jo_io[PART_OUT] == JIO_NULL;
+    int		use_null_for_err = options->jo_io[PART_ERR] == JIO_NULL;
     int		use_file_for_in = options->jo_io[PART_IN] == JIO_FILE;
     int		use_file_for_out = options->jo_io[PART_OUT] == JIO_FILE;
     int		use_file_for_err = options->jo_io[PART_ERR] == JIO_FILE;
     int		use_out_for_err = options->jo_io[PART_ERR] == JIO_OUT;
 
+    if (use_out_for_err && use_null_for_out)
+	use_null_for_err = TRUE;
+
     /* default is to fail */
     job->jv_status = JOB_FAILED;
     fd_in[0] = -1;
@@ -5072,7 +5078,7 @@
 	    goto failed;
 	}
     }
-    else if (pipe(fd_in) < 0)
+    else if (!use_null_for_in && pipe(fd_in) < 0)
 	goto failed;
 
     if (use_file_for_out)
@@ -5086,7 +5092,7 @@
 	    goto failed;
 	}
     }
-    else if (pipe(fd_out) < 0)
+    else if (!use_null_for_out && pipe(fd_out) < 0)
 	goto failed;
 
     if (use_file_for_err)
@@ -5100,12 +5106,15 @@
 	    goto failed;
 	}
     }
-    else if (!use_out_for_err && pipe(fd_err) < 0)
+    else if (!use_out_for_err && !use_null_for_err && pipe(fd_err) < 0)
 	goto failed;
 
-    channel = add_channel();
-    if (channel == NULL)
-	goto failed;
+    if (!use_null_for_in || !use_null_for_out || !use_null_for_err)
+    {
+	channel = add_channel();
+	if (channel == NULL)
+	    goto failed;
+    }
 # endif
 
     pid = fork();	/* maybe we should use vfork() */
@@ -5117,6 +5126,10 @@
 
     if (pid == 0)
     {
+# ifdef FEAT_CHANNEL
+	int		null_fd = -1;
+# endif
+
 	/* child */
 	reset_signals();		/* handle signals normally */
 
@@ -5131,15 +5144,31 @@
 
 	/* TODO: re-enable this when pipes connect without a channel */
 # ifdef FEAT_CHANNEL
+	if (use_null_for_in || use_null_for_out || use_null_for_err)
+	    null_fd = open("/dev/null", O_RDWR | O_EXTRA, 0);
+
 	/* set up stdin for the child */
-	if (!use_file_for_in)
-	    close(fd_in[1]);
-	close(0);
-	ignored = dup(fd_in[0]);
-	close(fd_in[0]);
+	if (use_null_for_in)
+	{
+	    close(0);
+	    ignored = dup(null_fd);
+	}
+	else
+	{
+	    if (!use_file_for_in)
+		close(fd_in[1]);
+	    close(0);
+	    ignored = dup(fd_in[0]);
+	    close(fd_in[0]);
+	}
 
 	/* set up stderr for the child */
-	if (use_out_for_err)
+	if (use_null_for_err)
+	{
+	    close(2);
+	    ignored = dup(null_fd);
+	}
+	else if (use_out_for_err)
 	{
 	    close(2);
 	    ignored = dup(fd_out[1]);
@@ -5154,11 +5183,21 @@
 	}
 
 	/* set up stdout for the child */
-	if (!use_file_for_out)
-	    close(fd_out[0]);
-	close(1);
-	ignored = dup(fd_out[1]);
-	close(fd_out[1]);
+	if (use_null_for_out)
+	{
+	    close(0);
+	    ignored = dup(null_fd);
+	}
+	else
+	{
+	    if (!use_file_for_out)
+		close(fd_out[0]);
+	    close(1);
+	    ignored = dup(fd_out[1]);
+	    close(fd_out[1]);
+	}
+	if (null_fd >= 0)
+	    close(null_fd);
 # endif
 
 	/* See above for type of argv. */
@@ -5183,17 +5222,23 @@
 	close(fd_out[1]);
     if (!use_out_for_err && !use_file_for_err)
 	close(fd_err[1]);
-    channel_set_pipes(channel,
-		      use_file_for_in ? INVALID_FD : fd_in[1],
-		      use_file_for_out ? INVALID_FD : fd_out[0],
-		      use_out_for_err || use_file_for_err
+    if (channel != NULL)
+    {
+	channel_set_pipes(channel,
+		      use_file_for_in || use_null_for_in
+						      ? INVALID_FD : fd_in[1],
+		      use_file_for_out || use_null_for_out
+						     ? INVALID_FD : fd_out[0],
+		      use_out_for_err || use_file_for_err || use_null_for_err
 						    ? INVALID_FD : fd_err[0]);
-    channel_set_job(channel, job, options);
+	channel_set_job(channel, job, options);
 #  ifdef FEAT_GUI
-    channel_gui_register(channel);
+	channel_gui_register(channel);
 #  endif
+    }
 # endif
 
+    /* success! */
     return;
 
 failed: ;
