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

Node.js - #5 - Process - Rodrigo Branas

  • 1.
    Rodrigo Branas –@rodrigobranas - http://www.agilecode.com.br Process
  • 2.
    Um processo éuma instância de um determinado programa em execução no sistema operacional.
  • 3.
  • 5.
    Exibindo as variáveisglobais global.js 1. Object.keys(global).forEach(function (value) { 2. console.log(value); 3. });
  • 7.
    Exibindo as propriedades global_process.js 1.Object.keys(process).forEach(function (value) { 2. console.log(value); 3. });
  • 9.
    Obtendo argumentos dalinha de comando process.js 1. process.argv.forEach(function (value) { 2. console.log(value); 3. });
  • 11.
  • 12.
    Exibindo informações doprocesso 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. }
  • 13.
    Opções disponíveis help.js 1. varhelp = [ 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. };
  • 15.
  • 16.
    São canais decomunicação, utilizados para realizar operações de entrada e saída, entre o programa e o ambiente onde ele está sendo executado.
  • 17.
  • 18.
    Utilizando stdout console.js 1. varkonsole = { 2. log: function (msg) { 3. process.stdout.write(msg + 'n'); 4. } 5. }; 6. konsole.log('A');
  • 20.
    Utilizando stdout estderr 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');
  • 22.
    Qual é adiferença entre output e error?
  • 23.
    Eles podem sertratados e redirecionados de formas diferentes
  • 24.
    Utilizando stdout estderr 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');
  • 26.
    Podemos ainda verificarcom 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.
  • 27.
    Utilizando stdout estderr 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);
  • 29.
    Utilizando stdin paraler 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. };
  • 30.
    Exibindo informações doprocesso 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. });
  • 32.
    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. });
  • 34.
    Exibindo outras informaçõesdo 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. }
  • 36.
    Tratando eventos (exit) process_with_keyboard.js 1.... 2. process.on('exit', function () { 3. console.log('bye'); 4. });
  • 38.
    Tratando eventos (uncaughtException) process_with_keyboard.js 1.... 2. process.on('uncaughtException', function () { 3. console.log('error'); 4. });
  • 39.
    Trate as exceçõesadequadamente
  • 40.
    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