You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					38 lines
				
				800 B
			
		
		
			
		
	
	
					38 lines
				
				800 B
			| 
								 
											3 years ago
										 
									 | 
							
								const exec = require('child_process').exec;
							 | 
						||
| 
								 | 
							
								const tree = require('./tree');
							 | 
						||
| 
								 | 
							
								const utils = require('./utils');
							 | 
						||
| 
								 | 
							
								var hasPS = true;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// discover if the OS has `ps`, and therefore can use psTree
							 | 
						||
| 
								 | 
							
								exec('ps', (error) => {
							 | 
						||
| 
								 | 
							
								  module.exports.hasPS = hasPS = !error;
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								module.exports = function main(pid, callback) {
							 | 
						||
| 
								 | 
							
								  if (typeof pid === 'number') {
							 | 
						||
| 
								 | 
							
								    pid = pid.toString();
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  if (hasPS && !process.env.NO_PS) {
							 | 
						||
| 
								 | 
							
								    return tree(pid, callback);
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  utils
							 | 
						||
| 
								 | 
							
								    .getStat()
							 | 
						||
| 
								 | 
							
								    .then(utils.tree)
							 | 
						||
| 
								 | 
							
								    .then((tree) => utils.pidsForTree(tree, pid))
							 | 
						||
| 
								 | 
							
								    .then((res) =>
							 | 
						||
| 
								 | 
							
								      callback(
							 | 
						||
| 
								 | 
							
								        null,
							 | 
						||
| 
								 | 
							
								        res.map((p) => p.PID)
							 | 
						||
| 
								 | 
							
								      )
							 | 
						||
| 
								 | 
							
								    )
							 | 
						||
| 
								 | 
							
								    .catch((error) => callback(error));
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								if (!module.parent) {
							 | 
						||
| 
								 | 
							
								  module.exports(process.argv[2], (e, pids) => console.log(pids));
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								module.exports.hasPS = hasPS;
							 |