Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

standard input & autres problèmes

5 réponses
Avatar
J. Laurens
Salut à tous,

je travaille sur Mac OS X qui est un BSD (d'après ce que j'ai compris)
et j'ai deux questions techniques:

1- comment on envoie un signal à un autre process, plus précisément,
l'application xdvi accepte qu'on lui envoie un signal SIGUSR2 (de
mémoire), comment lui envoyer?

2- Depuis mon appli, je lance des process, je peux écouter leur standard
output et écrire dans leur standard input. Mon problème est que ces
process sont pensés pour être lancés dans un terminal, en sorte que
lorsqu'une donnée en entrée est nécéssaire pour continuer, une question
est posée à l'utilisateur via le terminal. Pour l'instant, je parse la
sortie pour savoir si elle se termine par un point d'interrogation, mais
ce n'est pas joli et surtout, cela ne marche pas tout le temps...
Existe-t-il un moyen propre de savoir qu'un process est en attente
d'input? Je précise que le process traite un fichier et quitte quand il
a terminé.

Merci

5 réponses

Avatar
Jean-Marc Bourguet
J. Laurens writes:

Salut à tous,

je travaille sur Mac OS X qui est un BSD (d'après ce que j'ai compris)
et j'ai deux questions techniques:

1- comment on envoie un signal à un autre process, plus précisément,
l'application xdvi accepte qu'on lui envoie un signal SIGUSR2 (de
mémoire), comment lui envoyer?


kill

2- Depuis mon appli, je lance des process, je peux écouter leur
standard output et écrire dans leur standard input. Mon problème est
que ces process sont pensés pour être lancés dans un terminal, en
sorte que lorsqu'une donnée en entrée est nécéssaire pour continuer,
une question est posée à l'utilisateur via le terminal. Pour
l'instant, je parse la sortie pour savoir si elle se termine par un
point d'interrogation, mais ce n'est pas joli et surtout, cela ne
marche pas tout le temps... Existe-t-il un moyen propre de savoir
qu'un process est en attente d'input?


Il a des chances qu'il faille passer par les pseudo-terminaux pour
faire fonctionner une appli prevue pour etre interactive avec un
terminal.

grandpt, unlockpt

A+

--
Jean-Marc
Site de usenet-fr: http://www.usenet-fr.news.eu.org

Avatar
Laurent Wacrenier
J Laurens écrit:
1- comment on envoie un signal à un autre process, plus précisément,
l'application xdvi accepte qu'on lui envoie un signal SIGUSR2 (de
mémoire), comment lui envoyer?


en shell : kill -USR2 <numéro du processus>
en C : kill(<numéro du processus>, SIGUSR2)

2- Depuis mon appli, je lance des process, je peux écouter leur standard
output et écrire dans leur standard input. Mon problème est que ces
process sont pensés pour être lancés dans un terminal, en sorte que
lorsqu'une donnée en entrée est nécéssaire pour continuer, une question
est posée à l'utilisateur via le terminal. Pour l'instant, je parse la
sortie pour savoir si elle se termine par un point d'interrogation, mais
ce n'est pas joli et surtout, cela ne marche pas tout le temps...
Existe-t-il un moyen propre de savoir qu'un process est en attente
d'input? Je précise que le process traite un fichier et quitte quand il
a terminé.


En C, avec select() ou poll().

Avatar
Laurent Wacrenier
Jean-Marc Bourguet écrit:
J Laurens écrit:
2- Depuis mon appli, je lance des process, je peux écouter leur standard
output et écrire dans leur standard input. Mon problème est que ces
process sont pensés pour être lancés dans un terminal, en sorte que
lorsqu'une donnée en entrée est nécéssaire pour continuer, une question
est posée à l'utilisateur via le terminal. Pour l'instant, je parse la
sortie pour savoir si elle se termine par un point d'interrogation, mais
ce n'est pas joli et surtout, cela ne marche pas tout le temps...
Existe-t-il un moyen propre de savoir qu'un process est en attente
d'input? Je précise que le process traite un fichier et quitte quand il
a terminé.


En C, avec select() ou poll().


Je crois qu'il veut savoir si un autre process vers lequel il a un
pipe est blocke en lecture sur ce pipe... C'est a ma connaissance pas
possible.


Avec select() ou poll().



Avatar
Jean-Marc Bourguet
Laurent Wacrenier <lwa@ teaser . fr> writes:

Jean-Marc Bourguet écrit:
J Laurens écrit:
2- Depuis mon appli, je lance des process, je peux écouter leur standard
output et écrire dans leur standard input. Mon problème est que ces
process sont pensés pour être lancés dans un terminal, en sorte que
lorsqu'une donnée en entrée est nécéssaire pour continuer, une question
est posée à l'utilisateur via le terminal. Pour l'instant, je parse la
sortie pour savoir si elle se termine par un point d'interrogation, mais
ce n'est pas joli et surtout, cela ne marche pas tout le temps...
Existe-t-il un moyen propre de savoir qu'un process est en attente
d'input? Je précise que le process traite un fichier et quitte quand il
a terminé.


En C, avec select() ou poll().


Je crois qu'il veut savoir si un autre process vers lequel il a un
pipe est blocke en lecture sur ce pipe... C'est a ma connaissance pas
possible.


Avec select() ou poll().


Si je ne me trompe pas, poll()/select() m'indiquent si mon process
peut ecrire sans blocker, pas si un autre est blocke a l'autre bout du
pipe.


--
Jean-Marc
Site de usenet-fr: http://www.usenet-fr.news.eu.org




Avatar
Laurent Wacrenier
Jean-Marc Bourguet écrit:
Si je ne me trompe pas, poll()/select() m'indiquent si mon process
peut ecrire sans blocker, pas si un autre est blocke a l'autre bout du
pipe.


Si le but est d'envoyer les données, il n'y a aucun interêt à savoir
ce que fait le lecteur. Avec select() ou poll(), on sait quand c'est
possible.