O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

Node.js - #5 - Process - Rodrigo Branas

5.904 visualizações

Publicada em

Vamos falar sobre o objeto process, abordando algumas de suas principais informações como: pid, title, arch, platform, memoryUsage, uptime, env e muito mais.

Vamos começar interagindo com os argumentos passados pela linha de comando e depois por meio do teclado. Falaremos também sobre os 3 tipos de standard stream: input, output e error.

Por fim, aprenderemos a abortar o processo e a tratar eventos como exit e uncaughtException.

Publicada em: Internet
  • Seja o primeiro a comentar

Node.js - #5 - Process - Rodrigo Branas

  1. 1. Rodrigo Branas – @rodrigobranas - http://www.agilecode.com.br Process
  2. 2. Um processo é uma instância de um determinado programa em execução no sistema operacional.
  3. 3. https://github.com/nodejs/node-v0.x-archive/blob/master/src/node.js
  4. 4. Exibindo as variáveis globais global.js 1. Object.keys(global).forEach(function (value) { 2. console.log(value); 3. });
  5. 5. Exibindo as propriedades global_process.js 1. Object.keys(process).forEach(function (value) { 2. console.log(value); 3. });
  6. 6. Obtendo argumentos da linha de comando process.js 1. process.argv.forEach(function (value) { 2. console.log(value); 3. });
  7. 7. Exibindo informações do processo
  8. 8. Exibindo informações do processo process.js 1. var help = require('./help'); 2. var options = process.argv.slice(2); 3. if (options.length < 1) { 4. help.showOptions(); 5. return; 6. } 7. var option = options[0]; 8. switch(option) { 9. case 'a': 10. console.log('pid: ' + process.pid); 11. break; 12. case 'b': 13. console.log('title: ' + process.title); 14. break; 15. case 'c': 16. console.log('arch: ' + process.arch); 17. break; 18. case 'd': 19. console.log('platform: ' + process.platform); 20. break; 21. default: 22. help.showOptions(); 23. }
  9. 9. Opções disponíveis help.js 1. var help = [ 2. 'a) pid', 3. 'b) title', 4. 'c) arch', 5. 'd) platform' 6. ]; 8. exports.showOptions = function () { 9. help.forEach(function (value) { 10. console.log(value); 11. }); 12. };
  10. 10. Standard Streams
  11. 11. São canais de comunicação, utilizados para realizar operações de entrada e saída, entre o programa e o ambiente onde ele está sendo executado.
  12. 12. Input Output Error
  13. 13. Utilizando stdout console.js 1. var konsole = { 2. log: function (msg) { 3. process.stdout.write(msg + 'n'); 4. } 5. }; 6. konsole.log('A');
  14. 14. Utilizando stdout e stderr console.js 1. var konsole = { 2. log: function (msg) { 3. process.stdout.write(msg + 'n'); 4. }, 5. error: function (msg) { 6. process.stderr.write(msg + 'n'); 7. } 8. }; 9. konsole.log('A'); 10. konsole.error('B');
  15. 15. Qual é a diferença entre output e error?
  16. 16. Eles podem ser tratados e redirecionados de formas diferentes
  17. 17. Utilizando stdout e stderr console.js 1. var konsole = { 2. log: function (msg) { 3. process.stdout.write(msg + 'n'); 4. }, 5. error: function (msg) { 6. process.stderr.write(msg + 'n'); 7. } 8. }; 9. konsole.log('A'); 10. konsole.error('B');
  18. 18. Podemos ainda verificar com quem estamos interagindo, se é um TTY, ou teletype, o terminal ou o teclado, ou PTY, ou pseudo-teletype, que se refere a algum tipo de software como telnet, ssh ou xterm.
  19. 19. Utilizando stdout e stderr com isTTY console.js 1. var konsole = { 2. log: function (msg) { 3. process.stdout.write(msg + 'n'); 4. }, 5. error: function (msg) { 6. process.stderr.write(msg + 'n'); 7. } 8. }; 9. konsole.log('A TTY:' + !!process.stdout.isTTY); 10. konsole.error('B TTY:' + !!process.stderr.isTTY);
  20. 20. Utilizando stdin para ler o teclado keyboard.js 1. exports.onReadable = function (callback) { 2. process.stdin.on('readable', function () { 3. var chunk = process.stdin.read(); 4. if (chunk !== null) { 5. var data = chunk.toString().replace(/n/, ''); 6. callback(data); 7. } 8. }); 9. };
  21. 21. Exibindo informações do processo process_with_keyboard.js 1. var keyboard = require('./keyboard'); 2. var help = require('./help'); 4. keyboard.onReadable(function (option) { 5. switch(option) { 6. case 'a': 7. console.log('pid: ' + process.pid); 8. break; 9. case 'b': 10. console.log('title: ' + process.title); 11. break; 12. case 'c': 13. console.log('arch: ' + process.arch); 14. break; 15. case 'd': 16. console.log('platform: ' + process.platform); 17. break; 18. default: 19. help.showOptions(); 20. } 21. });
  22. 22. Abortando o processo process_with_keyboard.js 1. var keyboard = require('./keyboard'); 2. var help = require('./help'); 4. keyboard.onReadable(function (option) { 5. switch(option) { 6. case 'a': 7. console.log('pid: ' + process.pid); 8. break; 9. case 'b': 10. console.log('title: ' + process.title); 11. break; 12. case 'c': 13. console.log('arch: ' + process.arch); 14. break; 15. case 'd': 16. console.log('platform: ' + process.platform); 17. break; 18. case 'q': 19. process.exit(); 20. default: 21. help.showOptions(); 22. } 23. });
  23. 23. Exibindo outras informações do processo process_with_keyboard.js 1. ... 2. switch(option) { 3. case 'a': 4. console.log('pid: ' + process.pid); 5. break; 6. case 'b': 7. console.log('title: ' + process.title); 8. break; 9. case 'c': 10. console.log('arch: ' + process.arch); 11. break; 12. case 'd': 13. console.log('platform: ' + process.platform); 14. break; 15. case 'e': 16. console.dir(process.env); 17. break; 18. case 'u': 19. console.log('uptime: ' + process.uptime()); 20. break; 21. case 'v': 22. console.dir(process.versions); 23. break; 24. case 'q': 25. process.exit(); 26. default: 27. help.showOptions(); 28. }
  24. 24. Tratando eventos (exit) process_with_keyboard.js 1. ... 2. process.on('exit', function () { 3. console.log('bye'); 4. });
  25. 25. Tratando eventos (uncaughtException) process_with_keyboard.js 1. ... 2. process.on('uncaughtException', function () { 3. console.log('error'); 4. });
  26. 26. Trate as exceções adequadamente
  27. 27. Rodrigo Branas Agile Code: http://www.agilecode.com.br Twitter: @rodrigobranas SlideShare: http://www.slideshare.com/rodrigobranas YouTube: http://www.youtube.com/rodrigobranas LinkedIn: http://br.linkedin.com/in/rodrigobranas +Plus: https://plus.google.com/+RodrigoBranas GitHub: http://www.github.com/rodrigobranas

×