{"id":4885,"date":"2020-07-05T17:26:02","date_gmt":"2020-07-05T20:26:02","guid":{"rendered":"https:\/\/blog.clusterweb.com.br\/?p=4885"},"modified":"2020-07-05T17:26:02","modified_gmt":"2020-07-05T20:26:02","slug":"primeiro-e-segundo-plano-no-shell-do-linux-jobs-fg-e-bg","status":"publish","type":"post","link":"https:\/\/blog.clusterweb.com.br\/?p=4885","title":{"rendered":"PRIMEIRO E SEGUNDO PLANO NO SHELL DO LINUX (JOBS, FG E BG)"},"content":{"rendered":"<p>A m\u00e1gica do\u00a0GNU\/Linux\u00a0muitas vezes acontece sem que voc\u00ea tenha sequer uma interface gr\u00e1fica para uso amig\u00e1vel, por\u00e9m, o\u00a0shell\u00a0(ou o terminal) tamb\u00e9m tem suas mal\u00edcias para agilizar o seu trabalho.<\/p>\n<p>Voc\u00ea pode trabalhar com v\u00e1rias aplica\u00e7\u00f5es ao mesmo tempo sem ter que terminar o que estava fazendo para iniciar uma nova tarefa, isso gra\u00e7as aos comandos \u201cjobs\u201d, \u201cfg\u201d e \u201cbg\u201d. \u201cJobs\u201d significa \u201cTrabalhos\u201d e serve para exibir tudo o que voc\u00ea est\u00e1 fazendo no shell do GNU\/Linux mas que est\u00e1 em segundo plano. Claro, voc\u00ea precisa mandar as tarefas para segundo plano para poder utilizar o comando \u201cjobs\u201d.<\/p>\n<p>\u201cfg\u201d (foreground) serve para trazer as tarefas que est\u00e3o em segundo plano para o primeiro plano, assim voc\u00ea pode continuar fazendo o que estava fazendo anteriormente.<\/p>\n<p>J\u00e1 a \u00faltima op\u00e7\u00e3o, \u201cbg\u201d (background) serve para continuar executando tarefas em segundo plano, para que o shell fique livre e voc\u00ea possa executar outras tarefas sem interromper a tarefa anterior.<\/p>\n<p>Vamos ver alguns exemplos pr\u00e1ticos para que voc\u00ea entenda melhor.<\/p>\n<p><!--more--><\/p>\n<h2>ENVIANDO UM COMANDO PARA SEGUNDO PLANO<\/h2>\n<p>Existem v\u00e1rias maneiras para enviar um comando para segundo plano, por\u00e9m, a mais simples \u00e9 colocando um &amp; (E comercial) ao final do comando. Por exemplo:<\/p>\n<pre class=\"lang:default highlight:0 decode:true\">find \/ -iname *.mp3 &gt;&gt; musicas.txt &amp;<\/pre>\n<p>Voc\u00ea ver\u00e1 algo parecido com o trecho abaixo:<\/p>\n<pre class=\"lang:default highlight:0 decode:true\">luizotavio@luizotaviopc:~$ find \/ -iname *.mp3 &gt;&gt; musicas.txt &amp;\r\n[1] 7193\r\nluizotavio@luizotaviopc:~$ \r\n<\/pre>\n<p>Aquele [1] significa que essa \u00e9 a tarefa %1 que est\u00e1 sendo executada em segundo plano. O N\u00famero na frente \u00e9 o PID do processo.<\/p>\n<p>Outra maneira para enviar processos para segundo plano \u00e9 pressionando \u201cCTRL\u201d + \u201cZ\u201d para que a tarefa seja parada momentaneamente. Em seguida, digite \u201cbg\u201d. Assim a tarefa ser\u00e1 continuada, por\u00e9m em segundo plano.<\/p>\n<h2>MANIPULANDO V\u00c1RIAS TAREFAS EM SEGUNDO PLANO<\/h2>\n<p>Tamb\u00e9m \u00e9 poss\u00edvel enviar v\u00e1rias tarefas para segundo plano e trazer a que voc\u00ea desejar para o primeiro plano quando quiser. Vamos enviar duas\u00a0tarefas para segundo plano e ver o que ocorre.<\/p>\n<pre class=\"lang:default highlight:0 decode:true\">ping -q google.com.br &amp;\r\nnano texto &amp;<\/pre>\n<p>A primeira est\u00e1 enviando um ping para o IP do Google, j\u00e1 a segundo abre um arquivo de texto chamado \u201c<strong>texto<\/strong>\u201d para que voc\u00ea possa digitar alguma coisa.<\/p>\n<p>Neste momento, se voc\u00ea digitar \u201cjobs\u201d, ver\u00e1 o seguinte:<\/p>\n<pre class=\"lang:default decode:true \">luizotavio@luizotaviopc:~$ jobs\r\n[1]-  Executando              ping -q google.com.br &amp;\r\n[2]+  Parado                  nano texto\r\nluizotavio@luizotaviopc:~$ \r\n<\/pre>\n<p>Perceba que existem dois processos, um parado e outro executando. Isso ocorre porque alguns comandos (como o nano) n\u00e3o continuam a ser executados quando est\u00e3o em background, e faz sentido, pois n\u00e3o a nada que o nano possa fazer quando voc\u00ea n\u00e3o est\u00e1 olhando para a tela. Perceba tamb\u00e9m que existe um sinal de \u2013 e + na frente do n\u00famero do processo, isso simplesmente indica que o processo com sinal de + foi iniciado por \u00faltimo e ele ser\u00e1 trazido para o primeiro plano caso voc\u00ea digite apenas \u201cfg\u201d. O processo com um sinal de menos apenas indica que ele foi iniciado antes do processo com sinal de +. Se voc\u00ea iniciar mais tarefas, a pr\u00f3xima ter\u00e1 um sinal de +, a que estava com sinal de + ficar\u00e1 com um sinal de \u2013 e a primeira tarefa iniciada n\u00e3o ter\u00e1 nenhum sinal.<\/p>\n<p>Se voc\u00ea quiser trazer uma tarefa para primeiro plano, digite fg %N (onde N \u00e9 o n\u00famero do processo que deseja). Veja um exemplo, vou trazer o \u201cping\u201d para primeiro plano:<\/p>\n<pre class=\"lang:default highlight:0 decode:true \">luizotavio@luizotaviopc:~$ fg %1\r\nping -q google.com.br\r\n<\/pre>\n<p>Perceba que agora fiquei \u201cpreso\u201d ao ping, pois, n\u00e3o tenho mais como digitar comandos. Para resolver isso, voc\u00ea pode parar temporariamente a aplica\u00e7\u00e3o pressionando as teclas \u201cCTRL\u201d + \u201cZ\u201d do seu teclado.<\/p>\n<pre class=\"lang:default highlight:0 decode:true \">luizotavio@luizotaviopc:~$ fg %1\r\nping -q google.com.br\r\n^Z\r\n[1]+  Parado                  ping -q google.com.br\r\nluizotavio@luizotaviopc:~$ \r\n<\/pre>\n<p>E o shell est\u00e1 livre para que eu possa digitar novamente. O problema \u00e9 que se voc\u00ea digitar \u201cjobs\u201d novamente, ver\u00e1 que a tarefa n\u00e3o est\u00e1 executando:<\/p>\n<pre class=\"lang:default decode:true \">luizotavio@luizotaviopc:~$ jobs\r\n[1]+  Parado                  ping -q google.com.br\r\n[2]-  Parado                  nano texto\r\nluizotavio@luizotaviopc:~$ \r\n<\/pre>\n<p>Perceba que o status do \u201cping\u201d mudou de \u201cExecutando\u201d para \u201cParado\u201d. Para solucionar, simplesmente utilize o comando \u201cbg\u201d para continuar executando a tarefa em segundo plano. Veja:<\/p>\n<pre class=\"lang:default highlight:0 decode:true \">luizotavio@luizotaviopc:~$ bg %1\r\n[1]+ ping -q google.com.br &amp;\r\nluizotavio@luizotaviopc:~$ \r\n<\/pre>\n<p>Agora o shell continuar livre e se voc\u00ea analisar os \u201cjobs\u201d ver\u00e1 que o ping tamb\u00e9m est\u00e1 executando:<\/p>\n<pre class=\"lang:default highlight:0 decode:true \">luizotavio@luizotaviopc:~$ jobs\r\n[1]-  Executando              ping -q google.com.br &amp;\r\n[2]+  Parado                  nano texto\r\nluizotavio@luizotaviopc:~$ \r\n<\/pre>\n<p>Vamos \u00e0 algumas dicas finais.<\/p>\n<h2>DICAS FINAIS SOBRE TAREFAS DE PRIMEIRO E SEGUNDO PLANO NO LINUX<\/h2>\n<p>Apesar de ser uma excelente fun\u00e7\u00e3o, trabalhar com tarefas em primeiro (fg) e segundo (bg) plano no Linux tem l\u00e1 suas falhas, por exemplo, voc\u00ea vai se deparar com sa\u00eddas de alguns comandos na tela, elas simplesmente aparecem do nada, principalmente os erros.<\/p>\n<p>Isso acontece porque o shell n\u00e3o teria como lhe avisar caso acontecesse um erro em uma tarefa que estava sendo executada em segundo plano. Mas n\u00e3o se preocupe, nada do que \u00e9 mostrado na tela atrapalha o seu servi\u00e7o atual, se voc\u00ea estiver digitando um texto no nano, por exemplo, simplesmente pressione \u201cCTRL\u201d + \u201cL\u201d para limpar a tela e continue com seu servi\u00e7o normalmente.<\/p>\n<p>S\u00f3 tome cuidado com comandos que cospem texto na tela do tempo todo, se eles estiverem em \u201cbg\u201d e mostrando textos na sua tela de \u201cfg\u201d, voc\u00ea ter\u00e1 que traz\u00ea-los para o primeiro plano novamente e depois encerr\u00e1-los.<\/p>\n<p><strong>Observa\u00e7\u00e3o:<\/strong>\u00a0Tarefas em segundo plano n\u00e3o respondem aos seus comandos.<\/p>\n<p>Espero ter ajudado.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>A m\u00e1gica do\u00a0GNU\/Linux\u00a0muitas vezes acontece sem que voc\u00ea tenha sequer uma interface gr\u00e1fica para uso amig\u00e1vel, por\u00e9m, o\u00a0shell\u00a0(ou o terminal) tamb\u00e9m tem suas mal\u00edcias para agilizar o seu trabalho. Voc\u00ea pode trabalhar com v\u00e1rias aplica\u00e7\u00f5es ao mesmo tempo sem ter que terminar o que estava fazendo para iniciar uma nova tarefa, isso gra\u00e7as aos comandos [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[1082,1,730,830,1062,42,51,495,514,501,548],"tags":[1479,366,1478,1477,14,361,825,1476,1002,64],"class_list":["post-4885","post","type-post","status-publish","format-standard","hentry","category-centos-7-rhel-7","category-viazap","category-clusterweb","category-debian","category-freenas","category-leitura-recomendada","category-linux-linuxrs","category-profissional-de-ti","category-programacao","category-shell-script","category-ubuntu-2","tag-bg","tag-do","tag-fg","tag-jobs","tag-linux","tag-no","tag-plano","tag-primeiro","tag-segundo","tag-shell"],"_links":{"self":[{"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/posts\/4885","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=4885"}],"version-history":[{"count":1,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/posts\/4885\/revisions"}],"predecessor-version":[{"id":4886,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/posts\/4885\/revisions\/4886"}],"wp:attachment":[{"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=4885"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=4885"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=4885"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}