pidsarr
- это , добавляемое к каждому запуску. Однако вы просто планируете запуски в фоновом режиме и не дожидаетесь их завершения sh, поэтому вы не видите окончательного значения.
Вы можете проверить это с помощью setTimeout(() => console.log(pidsarr), 1000);
Чтобы заставить его ждать, вы можете либо переписать в терминах execSync
, либо getpid
вернуть Promise, а затем дождаться разрешения всех обещаний:
var exec = require('child_process').exec;
exec('(cd ~/; find . -type f -name "*.pid")', (error, stdout, stderr) => {
if (error) {
return 1
}
var fileps = stdout.toString().split('\n');
fileps.pop()
var pidsarr = new Array();
function getpid(path) {
var command = `(cd ~/; cat ${path} )`;
return new Promise((resolve, fail) => {
exec(command, (error, stdout, stderr) => {
if (error) {
fail();
}
pid = parseInt(stdout.toString());
pidsarr.push(pid);
resolve();
});
})
}
Promise.all(fileps.map(getpid)).then(() => console.log(pidsarr));
});
Обратите внимание, что это плохая практика вызывать find
и cat
вот так. Это быстрее, надежнее и портативнее, чтобы использовать glob
и fs
для поиска и чтения файлов без внешних инструментов.