Perguntas sobre 'signals'

1
resposta

É possível enviar um processo xpdf um sinal que faz com que ele recarregue o arquivo que está sendo exibido?

No comando de alteração de página, redesenho ou Recarregar, xpdf recarregará o arquivo que está sendo exibido no momento. É possível fazer com que xpdf recarregue o arquivo enviando um sinal? Qual sinal? (Estou basicamente procurando a...
13.02.2016 / 23:20
1
resposta

Executa um comando após o outro em zsh quando o Ctrl-C é pressionado

Eu recentemente mudei para zsh de bash (no OSX). Eu tenho um alias bash que eu usei para executar um programa depois outro (mesmo se o programa anterior sai com erro) no bash. Eu não posso descobrir como replicar isso no zsh. bash alias...
31.05.2016 / 18:26
2
respostas

Programa Wrapper que define o manipulador de sinal

Eu gostaria de ter um programa wrapper que execute um determinado comando e configure um manipulador de sinal para que ele seja executado quando o comando receber um sinal especificado. A questão é esta: Existe um programa utilitário para...
07.11.2011 / 04:43
2
respostas

Como detectar programaticamente quando um dispositivo gera uma interrupção? ______ qstntxt ___

Como detectar programaticamente quando um dispositivo gera uma interrupção? Isso pode acontecer quando um dispositivo é conectado ou desconectado.

E também neste caso: por exemplo: quando um dedo é segurado sobre um scanner de impressão digital, uma interrupção é levantada. Como detectar e possivelmente interceptar essa interrupção?

Eu quero escrever um aplicativo usando Gtkmm de modo que quando um evento ocorre como um CD sendo inserido ou um pendrive sendo conectado, eu pego a interrupção que esses dispositivos geram e uso para fazer algo no meu aplicativo, envolvendo esses dispositivos.

Se isso não puder ser feito em Gtkmm, posso interceptar a interrupção em um nível inferior e informar o aplicativo Gtkmm?

Eu estava verificando como o GParted se comporta. Inicialmente estava mostrando %code% e quando conectei meu pendrive, ele abriu automaticamente o aplicativo %code% . Quando chequei o GParted, o pendrive não estava presente no menu suspenso de dispositivos. Ele apareceu apenas quando eu selecionei “Refresh Devices” no menu do GParted ou Ctrl + R .

    
______ azszpr144883 ___
%bl0ck_qu0te%

Não, essa é uma atividade espaço do kernel . Felizmente, o kernel reporta o resultado de certos eventos através de interfaces acessíveis a partir da userland.

É um pouco ambíguo em sua pergunta se você deseja detectar quando um dispositivo de bloco está conectado, ou quando um sistema de arquivos é montado (embora pareça ser mais o antigo). Se o seu sistema usa automontagem (eles geralmente fazem por padrão), ele montará sistemas de arquivos de dispositivos de bloco quando eles estiverem conectados, caso contrário você terá que fazê-lo manualmente (por exemplo, com %code% ).

De qualquer forma, você deseja pesquisar / analisar / varrer uma interface baseada no nó de arquivo do kernel. Eu fiz isso antes em um aplicativo (na verdade, um C ++ GTK) que rastreia os dispositivos de bloco conectados e os sistemas de arquivos montados via %code% e %code% . Este é um método simples e independente de linguagem. Algumas pessoas acham isso um pouco desagradável no início porque envolve a leitura de arquivos / diretórios, mas essas interfaces não existem no disco, portanto não há sobrecarga de E / S pesada e lembre-se: %code% é uma chamada do sistema. A leitura dos nós de arquivos nas interfaces do kernel equivale à mesma coisa que uma API de %code% style, exceto, novamente, que é independente de idioma. Quando você vai ler esses nós, o kernel passa as informações que eles representam diretamente.

O diretório %code% lista os dispositivos conectados como arquivos especiais do nó do dispositivo - por exemplo, %código%. Eles são adicionados e removidos pelo kernel à medida que os dispositivos são plugados e removidos, portanto, se você rastreá-lo pesquisando em intervalos (digamos, a cada 5 segundos), é possível detectar o que há de novo e o que foi. A única complicação aqui é que, como não há API de estilo de retorno de chamada, você precisa criar seu próprio thread para isso, se quiser uma verificação contínua (talvez porque %code% exige que você clique em %code% ).

Uma alternativa provavelmente melhor para %code% seria o material em %code% . Observe que há uma diferença significativa entre %code% e %code% (veja abaixo) ou %code% na medida em que os nós do último contêm informações sobre coisas como dispositivos, enquanto os nós em %code% é uma conexão real com o dispositivo (assim, se você verificar %code% , não se incomode em ler os arquivos individuais, apenas note que eles existem).

%code% now-a-days é um link simbólico (veja também a opção %code% em %code% ) codificar%; %code% é uma interface principal do kernel do canivete suíço (consulte %code% ). Isto lista sistemas de arquivos montados ; Se você usar a montagem automática, as coisas aparecerão e desaparecerão quando o material estiver conectado / desconectado. As informações em %code% e %code% geralmente estão na forma de texto ASCII, portanto, você pode examinar esses arquivos com %code% , etc e analisá-los com funções de sequência (fluxo).

O WRT para outros tipos de dispositivos, como um scanner de impressão digital, %code% é um bom lugar para começar - %code% contém um diretório %code% e um %code% . Dispositivos de bloco são geralmente armazenamento; as informações neles podem ser acessadas aleatoriamente . Dispositivos char trocam informações com o sistema em um fluxo, o que inclui coisas como scanners, câmeras, coisas HID (dispositivo de interface humana, por exemplo, mouses e teclados). Percebo que o gtkmm tem algumas coisas de alto nível para coisas HID anexadas, presumivelmente, uma vez que elas são significativas na interação com a GUI.

    
______ azszpr146272 ___

Eu aprovo a resposta por %code% . Mas, em vez de usar a chamada do sistema %code% para verificar as alterações no sistema de arquivos, pode-se usar %code% .

Sua página man é aqui e aqui .

Há uma excelente explicação e exemplo dos criadores (desenvolvedores) de %code% aqui .

    
___

Como detectar programaticamente quando um dispositivo gera uma interrupção? Isso pode acontecer quando um dispositivo é conectado ou desconectado. E também neste caso: por exemplo: quando um dedo é segurado sobre um scanner de impressão digit...
16.07.2014 / 16:34
3
respostas

Enviando sigaction / sigaction através do shell

Eu tenho um programa c ++ que lida com vários sinais para executar diferentes ações, usando signal: signal(SIGHUP, signal_handler); Eu queria estender esse tratamento de sinal para permitir que eu enviasse solicitações de ação diferen...
30.09.2015 / 13:09
0
respostas

Interrompe um comando gdb lento?

Eu indetivamente pedi a gdb para listar todas as funções definidas. (gdb) info function Agora está animadamente sugando CPU e memória. Se eu for realmente rápido, o GDB irá parar com Ctrl-C e me avisar novamente. (gdb) info function...
12.02.2018 / 15:48
1
resposta

O envio de SIGINT para processar grupos às vezes é ignorado

Eu inicio um grupo de processos do bash. Então eu envio SIGINT para todo o processo grupo. Às vezes o SIGINT mata os processos, às vezes não. Porque SIGINT às vezes é ignorado? Eu vejo um comportamento diferente dependendo se o grupo de proce...
29.10.2017 / 09:03
1
resposta

Além de USR1 e USR2, quais sinais posso usar com segurança para um comportamento de interrupção personalizado? (em python)

Eu tenho um aplicativo complexo com USR1 e USR2 já definidos como tendo um propósito bem definido e não substituível. Existem toneladas de sinais diferentes no linux. Pode haver outro (talvez um obsoleto) que possa ser usado com segurança sem...
02.09.2016 / 09:29
1
resposta

Iniciando um shell interativo como um processo assíncrono (entrega de sinal)

Considere este pequeno script. Ele configura dois manipuladores de sinal; um para USR1 e outro para USR2 . Em seguida, inicia uma sessão de shell interativa. #!/bin/sh sigusr1_handler () { variable=1 printf "SIGUSR1: variable is...
05.08.2016 / 18:53
1
resposta

O pai reiniciado pelo filho não responde ao CTRL-C

Eu escrevi um programa. Ele inicia um processo (chame de A) que gera um processo filho (chame-o de D) que encerra e reinicia A. O problema é que agora não consigo matar A bem do terminal (ou seja, o CTRL-C não está conseguindo isto). O pgid de A...
08.02.2015 / 22:16