SlideShare uma empresa Scribd logo
1 de 40
Baixar para ler offline
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

Mais conteúdo relacionado

Mais procurados

Threads tasks e o tal do thread pool
Threads tasks e o tal do thread poolThreads tasks e o tal do thread pool
Threads tasks e o tal do thread poolFabrício Rissetto
 
TDC2016SP - Trilha Node.Js
TDC2016SP - Trilha Node.JsTDC2016SP - Trilha Node.Js
TDC2016SP - Trilha Node.Jstdc-globalcode
 
TDC 2015 - Execução em Background e Live Tiles em Universal Apps
TDC 2015 - Execução em Background e Live Tiles em Universal AppsTDC 2015 - Execução em Background e Live Tiles em Universal Apps
TDC 2015 - Execução em Background e Live Tiles em Universal AppsDiego Castro
 
Mobileconf dicas-android
Mobileconf dicas-androidMobileconf dicas-android
Mobileconf dicas-androidAlberto Souza
 
Funcionamento interno do node.js e boas práticas
Funcionamento interno do node.js e boas práticasFuncionamento interno do node.js e boas práticas
Funcionamento interno do node.js e boas práticasKirmayr tomaz
 
JavaScript - De verdade
JavaScript - De verdadeJavaScript - De verdade
JavaScript - De verdadeLuis Vendrame
 
Implementação em ActionScript 3 do Protocolo IRC
Implementação em ActionScript 3 do Protocolo IRCImplementação em ActionScript 3 do Protocolo IRC
Implementação em ActionScript 3 do Protocolo IRCJosé Travado
 
Node.js para desenvolvedores .NET
Node.js para desenvolvedores .NETNode.js para desenvolvedores .NET
Node.js para desenvolvedores .NETMVP Microsoft
 
Coroutines tech summit
Coroutines  tech summitCoroutines  tech summit
Coroutines tech summitPaulo Sato
 
Dicas e Truques TypeScript
Dicas e Truques TypeScriptDicas e Truques TypeScript
Dicas e Truques TypeScriptLoiane Groner
 
Servlets 3: o contexto assíncrono - JavaOne 2010 - Paulo Silveira
Servlets 3: o contexto assíncrono - JavaOne 2010 - Paulo SilveiraServlets 3: o contexto assíncrono - JavaOne 2010 - Paulo Silveira
Servlets 3: o contexto assíncrono - JavaOne 2010 - Paulo SilveiraCaelum
 

Mais procurados (20)

Threads tasks e o tal do thread pool
Threads tasks e o tal do thread poolThreads tasks e o tal do thread pool
Threads tasks e o tal do thread pool
 
Conteudo curso php
Conteudo curso phpConteudo curso php
Conteudo curso php
 
TDC2016SP - Trilha Node.Js
TDC2016SP - Trilha Node.JsTDC2016SP - Trilha Node.Js
TDC2016SP - Trilha Node.Js
 
TDC 2015 - Execução em Background e Live Tiles em Universal Apps
TDC 2015 - Execução em Background e Live Tiles em Universal AppsTDC 2015 - Execução em Background e Live Tiles em Universal Apps
TDC 2015 - Execução em Background e Live Tiles em Universal Apps
 
Curso de Node JS Básico
Curso de Node JS BásicoCurso de Node JS Básico
Curso de Node JS Básico
 
PHP e Mysql - DELETE
PHP e Mysql - DELETEPHP e Mysql - DELETE
PHP e Mysql - DELETE
 
Mobileconf dicas-android
Mobileconf dicas-androidMobileconf dicas-android
Mobileconf dicas-android
 
Funcionamento interno do node.js e boas práticas
Funcionamento interno do node.js e boas práticasFuncionamento interno do node.js e boas práticas
Funcionamento interno do node.js e boas práticas
 
JavaScript - De verdade
JavaScript - De verdadeJavaScript - De verdade
JavaScript - De verdade
 
Python e bancos NoSQL
Python e bancos NoSQLPython e bancos NoSQL
Python e bancos NoSQL
 
Implementação em ActionScript 3 do Protocolo IRC
Implementação em ActionScript 3 do Protocolo IRCImplementação em ActionScript 3 do Protocolo IRC
Implementação em ActionScript 3 do Protocolo IRC
 
Acessando o MySql com o Python
Acessando o MySql com o PythonAcessando o MySql com o Python
Acessando o MySql com o Python
 
Node.js para desenvolvedores .NET
Node.js para desenvolvedores .NETNode.js para desenvolvedores .NET
Node.js para desenvolvedores .NET
 
Coroutines tech summit
Coroutines  tech summitCoroutines  tech summit
Coroutines tech summit
 
Dicas e Truques TypeScript
Dicas e Truques TypeScriptDicas e Truques TypeScript
Dicas e Truques TypeScript
 
Let's log!
Let's log!Let's log!
Let's log!
 
Introdução a worker
Introdução a workerIntrodução a worker
Introdução a worker
 
PHP fora da Web
PHP fora da WebPHP fora da Web
PHP fora da Web
 
Doctrine2 Seminário PHP
Doctrine2 Seminário PHPDoctrine2 Seminário PHP
Doctrine2 Seminário PHP
 
Servlets 3: o contexto assíncrono - JavaOne 2010 - Paulo Silveira
Servlets 3: o contexto assíncrono - JavaOne 2010 - Paulo SilveiraServlets 3: o contexto assíncrono - JavaOne 2010 - Paulo Silveira
Servlets 3: o contexto assíncrono - JavaOne 2010 - Paulo Silveira
 

Destaque

Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo Branas
Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo BranasNode.js - #7 - Core Modules - http - Parte 1 - Rodrigo Branas
Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo BranasRodrigo Branas
 
Node.js - #6 - Core Modules - net - Rodrigo Branas
Node.js - #6 - Core Modules - net - Rodrigo BranasNode.js - #6 - Core Modules - net - Rodrigo Branas
Node.js - #6 - Core Modules - net - Rodrigo BranasRodrigo Branas
 
Node.js - #1 - Introdução - Rodrigo Branas
Node.js - #1 - Introdução - Rodrigo BranasNode.js - #1 - Introdução - Rodrigo Branas
Node.js - #1 - Introdução - Rodrigo BranasRodrigo Branas
 
A evolução do AngularJS
A evolução do AngularJSA evolução do AngularJS
A evolução do AngularJSRodrigo Branas
 
Utilizando diretivas com AngularJS
Utilizando diretivas com AngularJSUtilizando diretivas com AngularJS
Utilizando diretivas com AngularJSRodrigo Branas
 
Construindo Diretivas com AngularJS
Construindo Diretivas com AngularJSConstruindo Diretivas com AngularJS
Construindo Diretivas com AngularJSRodrigo Branas
 
Criando serviços com AngularJS
Criando serviços com AngularJSCriando serviços com AngularJS
Criando serviços com AngularJSRodrigo Branas
 
HTTP Interceptors com AngularJS
HTTP Interceptors com AngularJSHTTP Interceptors com AngularJS
HTTP Interceptors com AngularJSRodrigo Branas
 
Introdução ao AngularJS
Introdução ao AngularJSIntrodução ao AngularJS
Introdução ao AngularJSRodrigo Branas
 
Técnicas de Refactoring
Técnicas de RefactoringTécnicas de Refactoring
Técnicas de RefactoringRodrigo Branas
 
#5 - Git - Contribuindo com um repositório remoto
#5 - Git - Contribuindo com um repositório remoto#5 - Git - Contribuindo com um repositório remoto
#5 - Git - Contribuindo com um repositório remotoRodrigo Branas
 
Test-Driven Development com JavaScript, Jasmine Karma
Test-Driven Development com JavaScript, Jasmine  KarmaTest-Driven Development com JavaScript, Jasmine  Karma
Test-Driven Development com JavaScript, Jasmine KarmaRodrigo Branas
 
HTTP, JSON, REST e AJAX com AngularJS
HTTP, JSON, REST e AJAX com AngularJSHTTP, JSON, REST e AJAX com AngularJS
HTTP, JSON, REST e AJAX com AngularJSRodrigo Branas
 
Criando Filtros com AngularJS
Criando Filtros com AngularJSCriando Filtros com AngularJS
Criando Filtros com AngularJSRodrigo Branas
 
Automação de Testes com AngularJS
Automação de Testes com AngularJSAutomação de Testes com AngularJS
Automação de Testes com AngularJSRodrigo Branas
 

Destaque (20)

Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo Branas
Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo BranasNode.js - #7 - Core Modules - http - Parte 1 - Rodrigo Branas
Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo Branas
 
Node.js - #6 - Core Modules - net - Rodrigo Branas
Node.js - #6 - Core Modules - net - Rodrigo BranasNode.js - #6 - Core Modules - net - Rodrigo Branas
Node.js - #6 - Core Modules - net - Rodrigo Branas
 
Node.js - #1 - Introdução - Rodrigo Branas
Node.js - #1 - Introdução - Rodrigo BranasNode.js - #1 - Introdução - Rodrigo Branas
Node.js - #1 - Introdução - Rodrigo Branas
 
A evolução do AngularJS
A evolução do AngularJSA evolução do AngularJS
A evolução do AngularJS
 
Utilizando diretivas com AngularJS
Utilizando diretivas com AngularJSUtilizando diretivas com AngularJS
Utilizando diretivas com AngularJS
 
Construindo Diretivas com AngularJS
Construindo Diretivas com AngularJSConstruindo Diretivas com AngularJS
Construindo Diretivas com AngularJS
 
Criando serviços com AngularJS
Criando serviços com AngularJSCriando serviços com AngularJS
Criando serviços com AngularJS
 
HTTP Interceptors com AngularJS
HTTP Interceptors com AngularJSHTTP Interceptors com AngularJS
HTTP Interceptors com AngularJS
 
Introdução ao AngularJS
Introdução ao AngularJSIntrodução ao AngularJS
Introdução ao AngularJS
 
Grunt
GruntGrunt
Grunt
 
Técnicas de Refactoring
Técnicas de RefactoringTécnicas de Refactoring
Técnicas de Refactoring
 
#5 - Git - Contribuindo com um repositório remoto
#5 - Git - Contribuindo com um repositório remoto#5 - Git - Contribuindo com um repositório remoto
#5 - Git - Contribuindo com um repositório remoto
 
Test-Driven Development com JavaScript, Jasmine Karma
Test-Driven Development com JavaScript, Jasmine  KarmaTest-Driven Development com JavaScript, Jasmine  Karma
Test-Driven Development com JavaScript, Jasmine Karma
 
#2 - Git - DAG
#2 - Git - DAG#2 - Git - DAG
#2 - Git - DAG
 
Selenium - WebDriver
Selenium - WebDriverSelenium - WebDriver
Selenium - WebDriver
 
HTTP, JSON, REST e AJAX com AngularJS
HTTP, JSON, REST e AJAX com AngularJSHTTP, JSON, REST e AJAX com AngularJS
HTTP, JSON, REST e AJAX com AngularJS
 
JavaScript - Date
JavaScript - DateJavaScript - Date
JavaScript - Date
 
Scope AngularJS
Scope AngularJSScope AngularJS
Scope AngularJS
 
Criando Filtros com AngularJS
Criando Filtros com AngularJSCriando Filtros com AngularJS
Criando Filtros com AngularJS
 
Automação de Testes com AngularJS
Automação de Testes com AngularJSAutomação de Testes com AngularJS
Automação de Testes com AngularJS
 

Semelhante a Node.js - #5 - Process - Rodrigo Branas

Testes em Aplicações Web com Cactus
Testes em Aplicações Web com CactusTestes em Aplicações Web com Cactus
Testes em Aplicações Web com CactusDenis L Presciliano
 
Ecosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javEcosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javJulio Viegas
 
TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... m...
TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... m...TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... m...
TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... m...tdc-globalcode
 
Threads 07: Sincronizadores
Threads 07: SincronizadoresThreads 07: Sincronizadores
Threads 07: SincronizadoresHelder da Rocha
 
Introdução ao processamento paralelo com o Grand Central Dispatch
Introdução ao processamento paralelo com o Grand Central DispatchIntrodução ao processamento paralelo com o Grand Central Dispatch
Introdução ao processamento paralelo com o Grand Central Dispatchflisolmaringa
 
Mini-curso Programação Paralela e Distribuída
Mini-curso Programação Paralela e DistribuídaMini-curso Programação Paralela e Distribuída
Mini-curso Programação Paralela e DistribuídaDeivid Martins
 
Threads 08: Executores e Futures
Threads 08: Executores e FuturesThreads 08: Executores e Futures
Threads 08: Executores e FuturesHelder da Rocha
 
Leonardo Zamariola - High Order Functions e Functional Interfaces
Leonardo Zamariola - High Order Functions e Functional InterfacesLeonardo Zamariola - High Order Functions e Functional Interfaces
Leonardo Zamariola - High Order Functions e Functional InterfacesDevCamp Campinas
 
TDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no AndroidTDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no Androidtdc-globalcode
 
TDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no AndroidTDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no Androidtdc-globalcode
 
Aplicações com Tecnologias Web
Aplicações com Tecnologias WebAplicações com Tecnologias Web
Aplicações com Tecnologias WebRildo Pragana
 
Linux4all#2
Linux4all#2Linux4all#2
Linux4all#2Daniel
 
pgBouncer: um aglomerador de conexões para PostgreSQL
pgBouncer: um aglomerador de conexões para PostgreSQLpgBouncer: um aglomerador de conexões para PostgreSQL
pgBouncer: um aglomerador de conexões para PostgreSQLelliando dias
 
Play Framework - FLISOL
Play Framework - FLISOLPlay Framework - FLISOL
Play Framework - FLISOLgrupoweblovers
 
ASP.Net Módulo 2
ASP.Net   Módulo 2ASP.Net   Módulo 2
ASP.Net Módulo 2michellobo
 

Semelhante a Node.js - #5 - Process - Rodrigo Branas (20)

Testes em Aplicações Web com Cactus
Testes em Aplicações Web com CactusTestes em Aplicações Web com Cactus
Testes em Aplicações Web com Cactus
 
Ecosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javEcosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_jav
 
TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... m...
TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... m...TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... m...
TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... m...
 
Realtime com node.js e socket.io
Realtime com node.js e socket.ioRealtime com node.js e socket.io
Realtime com node.js e socket.io
 
Struts2 remote codeexecution
Struts2 remote codeexecutionStruts2 remote codeexecution
Struts2 remote codeexecution
 
Threads 07: Sincronizadores
Threads 07: SincronizadoresThreads 07: Sincronizadores
Threads 07: Sincronizadores
 
Introdução ao processamento paralelo com o Grand Central Dispatch
Introdução ao processamento paralelo com o Grand Central DispatchIntrodução ao processamento paralelo com o Grand Central Dispatch
Introdução ao processamento paralelo com o Grand Central Dispatch
 
Mini-curso Programação Paralela e Distribuída
Mini-curso Programação Paralela e DistribuídaMini-curso Programação Paralela e Distribuída
Mini-curso Programação Paralela e Distribuída
 
Threads 08: Executores e Futures
Threads 08: Executores e FuturesThreads 08: Executores e Futures
Threads 08: Executores e Futures
 
Leonardo Zamariola - High Order Functions e Functional Interfaces
Leonardo Zamariola - High Order Functions e Functional InterfacesLeonardo Zamariola - High Order Functions e Functional Interfaces
Leonardo Zamariola - High Order Functions e Functional Interfaces
 
TDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no AndroidTDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no Android
 
TDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no AndroidTDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no Android
 
Aplicações com Tecnologias Web
Aplicações com Tecnologias WebAplicações com Tecnologias Web
Aplicações com Tecnologias Web
 
servlet-respostas
servlet-respostasservlet-respostas
servlet-respostas
 
App scala
App scalaApp scala
App scala
 
Kernel cooperativo
Kernel cooperativoKernel cooperativo
Kernel cooperativo
 
Linux4all#2
Linux4all#2Linux4all#2
Linux4all#2
 
pgBouncer: um aglomerador de conexões para PostgreSQL
pgBouncer: um aglomerador de conexões para PostgreSQLpgBouncer: um aglomerador de conexões para PostgreSQL
pgBouncer: um aglomerador de conexões para PostgreSQL
 
Play Framework - FLISOL
Play Framework - FLISOLPlay Framework - FLISOL
Play Framework - FLISOL
 
ASP.Net Módulo 2
ASP.Net   Módulo 2ASP.Net   Módulo 2
ASP.Net Módulo 2
 

Mais de Rodrigo Branas

#6 - Git - Desfazendo as coisas
#6 - Git - Desfazendo as coisas#6 - Git - Desfazendo as coisas
#6 - Git - Desfazendo as coisasRodrigo Branas
 
#1 - Git - Introdução
#1 - Git - Introdução#1 - Git - Introdução
#1 - Git - IntroduçãoRodrigo Branas
 
#3 - Git - Branching e Merging
#3 - Git - Branching e Merging#3 - Git - Branching e Merging
#3 - Git - Branching e MergingRodrigo Branas
 
JavaScript - Expressões Regulares
JavaScript - Expressões RegularesJavaScript - Expressões Regulares
JavaScript - Expressões RegularesRodrigo Branas
 
Criando aplicações Single-Page com AngularJS
Criando aplicações Single-Page com AngularJSCriando aplicações Single-Page com AngularJS
Criando aplicações Single-Page com AngularJSRodrigo Branas
 
Desvendando a linguagem JavaScript
Desvendando a linguagem JavaScriptDesvendando a linguagem JavaScript
Desvendando a linguagem JavaScriptRodrigo Branas
 

Mais de Rodrigo Branas (9)

Clean Architecture
Clean ArchitectureClean Architecture
Clean Architecture
 
#6 - Git - Desfazendo as coisas
#6 - Git - Desfazendo as coisas#6 - Git - Desfazendo as coisas
#6 - Git - Desfazendo as coisas
 
#1 - Git - Introdução
#1 - Git - Introdução#1 - Git - Introdução
#1 - Git - Introdução
 
#4 - Git - Stash
#4 - Git - Stash#4 - Git - Stash
#4 - Git - Stash
 
#3 - Git - Branching e Merging
#3 - Git - Branching e Merging#3 - Git - Branching e Merging
#3 - Git - Branching e Merging
 
JavaScript - Expressões Regulares
JavaScript - Expressões RegularesJavaScript - Expressões Regulares
JavaScript - Expressões Regulares
 
Criando aplicações Single-Page com AngularJS
Criando aplicações Single-Page com AngularJSCriando aplicações Single-Page com AngularJS
Criando aplicações Single-Page com AngularJS
 
Bower
BowerBower
Bower
 
Desvendando a linguagem JavaScript
Desvendando a linguagem JavaScriptDesvendando a linguagem JavaScript
Desvendando a linguagem JavaScript
 

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.
  • 4.
  • 5. Exibindo as variáveis globais global.js 1. Object.keys(global).forEach(function (value) { 2. console.log(value); 3. });
  • 6.
  • 7. Exibindo as propriedades global_process.js 1. Object.keys(process).forEach(function (value) { 2. console.log(value); 3. });
  • 8.
  • 9. Obtendo argumentos da linha de comando process.js 1. process.argv.forEach(function (value) { 2. console.log(value); 3. });
  • 10.
  • 12. 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. }
  • 13. 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. };
  • 14.
  • 16. 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.
  • 18. Utilizando stdout console.js 1. var konsole = { 2. log: function (msg) { 3. process.stdout.write(msg + 'n'); 4. } 5. }; 6. konsole.log('A');
  • 19.
  • 20. 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');
  • 21.
  • 22. Qual é a diferença entre output e error?
  • 23. Eles podem ser tratados e redirecionados de formas diferentes
  • 24. 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');
  • 25.
  • 26. 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.
  • 27. 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);
  • 28.
  • 29. 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. };
  • 30. 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. });
  • 31.
  • 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. });
  • 33.
  • 34. 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. }
  • 35.
  • 36. Tratando eventos (exit) process_with_keyboard.js 1. ... 2. process.on('exit', function () { 3. console.log('bye'); 4. });
  • 37.
  • 38. Tratando eventos (uncaughtException) process_with_keyboard.js 1. ... 2. process.on('uncaughtException', function () { 3. console.log('error'); 4. });
  • 39. Trate as exceções adequadamente
  • 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