OVH Cloud OVH Cloud

PID max ?

14 réponses
Avatar
JKB
Bonjour à tous,

Je suis en train de me poser une question bête... Comment connaître
de façon _portable_ le PID maximal sur un système donné ? POSIX dit-il
quelque chose là-dessus ? Je n'ai rien trouvé de probant...

Cordialement,

JKB

--
Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre
masse corporelle, mais disperse à lui seul 25% de l'énergie que nous
consommons tous les jours.

4 réponses

1 2
Avatar
JKB
Le 22-11-2008, ? propos de
Re: PID max ?,
Nicolas George ?crivait dans fr.comp.os.unix :
JKB wrote in message :
Je suppose comme il
existe pthread_kill() qu'on peut envoyer un signal à un thread et que
cela fonctionne comme kill() (en gros que je peux envoyer un signal
depuis un processus à un thread d'un autre processus pour peu que j'en
aie les droits).



Lire la norme, ça peut aider, de temps en temps :

The pthread_kill() function provides a mechanism for asynchronously
directing a signal at a thread in the calling process.

J'attire ton attention sur les quatre derniers mots.



Merci pour cet éclairage. Juste quelques remarques supplémentaires :

1/ Je n'ai pas la norme sous la main parce que je me méfie des
implantations sur les différents systèmes et des interprétations de
temps en temps baroques. Je me réfère donc plus généralement aux pages
man (ou info) des OS qu'à la norme POSIX brute.

2/ Je n'ai mention de ces quatre mots ni dans la doc Linux, ni dans
celle de NetBSD (4.0.1), ni dans celle de FreeBSD, ni encore dans celle de
Solaris 9 ou 10. Si aucun de ces systèmes ne prend la peine de
mentionner un tel truc, je suis donc en droit de me poser la question ou
de la poser ici. J'ajouterai aussi que la couche de compatibilité POSIX
d'OpenVMS 8.3 ne mentionne pas non plus ces quatre mots. D'ailleurs sous
VMS, je peux envoyer un signal d'un processus à un thread particulier
d'un autre processus et _ça fonctionn parfaitement_.

3/ Avant de poser une question, j'ai pour habitude de lire la doc et
de faire des tests.

JKB

--
Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre
masse corporelle, mais disperse à lui seul 25% de l'énergie que nous
consommons tous les jours.
Avatar
talon
JKB wrote:
Le 22-11-2008, ? propos de
Re: PID max ?,
Nicolas George ?crivait dans fr.comp.os.unix :
> JKB wrote in message :
>> Je suppose comme il
>> existe pthread_kill() qu'on peut envoyer un signal à un thread et que
>> cela fonctionne comme kill() (en gros que je peux envoyer un signal
>> depuis un processus à un thread d'un autre processus pour peu que j'en
>> aie les droits).
>
> Lire la norme, ça peut aider, de temps en temps :
>
> The pthread_kill() function provides a mechanism for asynchronously
> directing a signal at a thread in the calling process.
>
> J'attire ton attention sur les quatre derniers mots.

Merci pour cet éclairage. Juste quelques remarques supplémentaires :

1/ Je n'ai pas la norme sous la main parce que je me méfie des
implantations sur les différents systèmes et des interprétations de
temps en temps baroques. Je me réfère donc plus généralement aux pages
man (ou info) des OS qu'à la norme POSIX brute.

2/ Je n'ai mention de ces quatre mots ni dans la doc Linux, ni dans
celle de NetBSD (4.0.1), ni dans celle de FreeBSD, ni encore dans celle de
Solaris 9 ou 10. >



L'implémentation de FreeBSD est complètement inspirée par le livre de
Butenhof, qui insiste lourdement sur le fait que les threads dans un
processus n'ont pas à savoir ce qui se passe dans les threads d'un autre
processus. Par exemple un kill envoyé sur un processus peut être
attrapé par n'importe quel thread du processus. C'est justement une
des raisons pour lesquelles l'ancienne implémentation de Linux n'était
pas conformante en associant un PID différent à chaque thread. De même
les threads ne sont pas faits pour faire de l'IO asynchrone comme tu le
souhaites, tu crées un thread pour faire l'IO de manière synchrone, et
il attend sagement la fin de l'IO, ce qui ne coute pas grand chose car
tu peux créér beaucoup de threads. Eventuellement un pthread_join
complète le boulot.

A titre d'info, tu peux trouver le livre de Butenhof piraté en cherchant
_djvu dans google .... si tu ne l'as pas. Sa lecture est absolument
indispensable, car les threads posix ne sont pas intuitifs.




--

Michel TALON
Avatar
naddy
Nicolas George <nicolas$ wrote:

Aucune garantie. Un pthread_t pourrait très bien être un pointeur, pour ce
qu'on en sait.



Ce n'est pas un cas hypothétique.

$ grep 'typedef.*pthread_t' /usr/include/pthread.h
typedef struct pthread *pthread_t;
$ uname
OpenBSD

--
Christian "naddy" Weisgerber
Avatar
talon
JKB wrote:
2/ Je n'ai mention de ces quatre mots ni ... ni encore dans celle de
Solaris 9 ou 10.



Dans
http://docs.sun.com/app/docs/doc/801-6659/6i116aqmf?l=en&a=view#02.Programming_With_Threads-6

Send a Signal to a Thread
thr_kill(3T)

thr_kill() sends a signal to a thread.


#include <thread.h>
#include <signal.h>

int thr_kill(thread_t target_thread, int sig);

thr_kill() sends the signal sig to the thread specified by
target_thread. target_thread must be a thread within the same process as
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
the calling thread. The sig argument must be from the list given in
signal(5).




--

Michel TALON
1 2