Ответ 1
Из node.js документации:
По умолчанию родитель будет ждать выхода отдельного ребенка. Чтобы родитель не ожидал получения определенного дочернего элемента, используйте метод child.unref(), а родительский цикл события не будет включать дочерний элемент в его счетчик ссылок.
При использовании отключенной опции, чтобы начать длительный процесс, этот процесс не будет работать в фоновом режиме, если он не содержит конфигурацию stdio, которая не связана с родителем. Если родительский stdio наследуется, дочерний элемент останется прикрепленным к управляющему терминалу.
Вам нужно изменить код следующим образом:
#!/usr/bin/node
var fs = require('fs');
var out = fs.openSync('./out.log', 'a');
var err = fs.openSync('./out.log', 'a');
var cp = require('child_process');
var MANFILE='ALengthyNodeManual.pdf';
var child = cp.spawn('gnome-open', [MANFILE], { detached: true, stdio: [ 'ignore', out, err ] });
child.unref();