Node.js - #5 - Process - Rodrigo Branas

40
Rodrigo Branas – @rodrigobranas - http://www.agilecode.com.br Process

Transcript of Node.js - #5 - Process - Rodrigo Branas

Rodrigo Branas – @rodrigobranas - http://www.agilecode.com.br

Process

Um processo é uma instância de um determinado programa em execução no

sistema operacional.

https://github.com/nodejs/node-v0.x-archive/blob/master/src/node.js

Exibindo as variáveis globais global.js

1. Object.keys(global).forEach(function (value) {2. console.log(value);3. });

Exibindo as propriedades global_process.js

1. Object.keys(process).forEach(function (value) {2. console.log(value);3. });

Obtendo argumentos da linha de comando process.js

1. process.argv.forEach(function (value) {2. console.log(value);3. });

Exibindo informações do processo

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. }

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. };

Standard Streams

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.

Input Output Error

Utilizando stdout console.js

1. var konsole = {2. log: function (msg) {3. process.stdout.write(msg + '\n');4. }5. };6. konsole.log('A');

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');

Qual é a diferença entre output e error?

Eles podem ser tratados e redirecionados de formas diferentes

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');

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.

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);

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. };

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. });

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. });

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. }

Tratando eventos (exit) process_with_keyboard.js

1. ...2. process.on('exit', function () {3. console.log('bye');4. });

Tratando eventos (uncaughtException) process_with_keyboard.js

1. ...2. process.on('uncaughtException', function () {3. console.log('error');4. });

Trate as exceções adequadamente

Rodrigo BranasAgile 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