Como trazer um programa em background para foreground

1. Como trazer um programa em background para foreground

Paulo Sergio Lima de Oliveira Junior
Kiesa

(usa XUbuntu)

Enviado em 23/02/2018 - 16:42h

Eu coloquei um programa em background em um cluster e depois me desconectei, agora eu quero pode saber o andamento do programa pois eu coloquei uma printf que diz ate aonde ja rodou.



USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
cluster 12930 99.8 3.9 364068 121124 ? R 03:04 807:25 ./a.out
cluster 14481 0.0 0.0 88344 1836 ? S 15:54 0:00 sshd: cluster@pts/1
cluster 14482 0.0 0.2 26836 7756 pts/1 Ss 15:54 0:00 -bash
cluster 14617 0.0 0.0 18412 1248 pts/1 R+ 16:33 0:00 ps ux


Ja tentei usar o jobs e fg



  


2. Re: Como trazer um programa em background para foreground

Paulo
paulo1205

(usa Ubuntu)

Enviado em 24/02/2018 - 00:30h

ttysnoop?

Você também pode usar strace e ficar procurando pela chamada a write() no descritor 1.


3. Re: Como trazer um programa em background para foreground

Paulo Sergio Lima de Oliveira Junior
Kiesa

(usa XUbuntu)

Enviado em 24/02/2018 - 04:14h

Oq esse comando faz exatamente? Pois nao conheço e tenho medo de instalar algo no cluster


4. Re: Como trazer um programa em background para foreground

Paulo
paulo1205

(usa Ubuntu)

Enviado em 24/02/2018 - 06:43h

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
cluster 12930 99.8 3.9 364068 121124 ? R 03:04 807:25 ./a.out
cluster 14481 0.0 0.0 88344 1836 ? S 15:54 0:00 sshd: cluster@pts/1
cluster 14482 0.0 0.2 26836 7756 pts/1 Ss 15:54 0:00 -bash
cluster 14617 0.0 0.0 18412 1248 pts/1 R+ 16:33 0:00 ps ux


Para trazer um processo para foreground, esse processo tem de estar numa sessão (indicada pelo session-ID, ou sid) que possua um terminal controlador (i.e., não pode ser um processo órfão). e a chamada que vai colocar o programa em foreground (tcsetpgrp()) tem de vir de um processo que esteja na mesma sessão (i.e. tem o mesmo terminal controlador e o mesmo sid).

Pela saída do comando ps, transcrita por você, o processo com PID 12930 não tem um terminal controlador associado (coluna “TTY”), logo é um processo órfão, o que viola a primeira condição. Além disso, como você vai tentar fazer a chamada a partir de uma outra sessão (outro terminal controlador), a segunda condição também não será válida.

Por isso, como você mencionou no corpo da mensagem que queria detectar o que for encaminhado pelo printf(), eu indiquei outros métodos que permitem monitorar o programa. Entretanto, minhas sugestões anteriores não foram muito boas: ttysnoop não vai funcionar porque requer configuração cooperativa com um daemon (ttysnoops), que fica funcionando como uma espécie de intermediário. strace é uma ferramenta de depuração que intercepta todas as chamadas ao kernel, deixando a execução do programa possivelmente mais lenta, e peekfd permite detectar atividades em arquivos de um dado outro processo, mas, pelos testes que fiz aqui depois de ter dado a sugestão (e admito que não sei se fiz do jeito correto), deu falha a tentar obter acesso ao descritor vinculado ao processo órfão.


5. Re: Como trazer um programa em background para foreground

Paulo
paulo1205

(usa Ubuntu)

Enviado em 26/02/2018 - 11:09h

Pensei ontem numa maneira diferente de conseguir observar a saída do processo órfão. Você ainda tem interesse no assunto?






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts