On Thu, 24 Oct 2002, Maxim Sobolev wrote:
> Please review the patch, which adds two new types of events -
> NOTE_STARTEXEC and NOTE_STOPEXEC, that could be used to get
> notification when the image starts or stops executing. For example, it
> could be used to monitor that a daemon is up and running and notify
> administrator when for some reason in exits. I am running this code
> for more than a year now without any problems.
>
> Any comments and suggestions are welcome.
Couldn't this just be done by init(8) and /etc/ttys? Or inetd? If you
want to write your own, couldn't you use waitpid()? Or a kevent() of
EVFILT_PROC with NOTE_EXIT/NOTE_FORK? I'm not sure I see the need for
this.
Comments below.
> +.It NOTE_STOPEXEC
> +Execution of the file referenced by the descriptor ended. Triggered
> when
> +the process associated with the file exited or was replaced with anoter
> +image using
> +.Xr execve 2
> +or simial syscall. The PID of the process is returned in
^
typo
> Index: src/sys/sys/event.h
> ===
> RCS file: /home/ncvs/src/sys/sys/event.h,v
> retrieving revision 1.21
> diff -d -u -r1.21 event.h
> --- src/sys/sys/event.h 29 Jun 2002 19:14:52 - 1.21
> +++ src/sys/sys/event.h 24 Oct 2002 06:57:41 -
> @@ -83,13 +83,15 @@
> /*
> * data/hint flags for EVFILT_VNODE, shared with userspace
> */
> -#define NOTE_DELETE 0x0001 /* vnode was removed */
> -#define NOTE_WRITE 0x0002 /* data contents changed */
> -#define NOTE_EXTEND 0x0004 /* size increased */
> -#define NOTE_ATTRIB 0x0008 /* attributes changed */
> -#define NOTE_LINK 0x0010 /* link count changed */
> -#define NOTE_RENAME 0x0020 /* vnode was renamed */
> -#define NOTE_REVOKE 0x0040 /* vnode access was revoked */
> +#define NOTE_DELETE 0x0010 /* vnode was removed */
> +#define NOTE_WRITE 0x0020 /* data contents changed */
> +#define NOTE_EXTEND 0x0040 /* size increased */
> +#define NOTE_ATTRIB 0x0080 /* attributes changed */
> +#define NOTE_LINK 0x0100 /* link count changed */
> +#define NOTE_RENAME 0x0200 /* vnode was renamed */
> +#define NOTE_REVOKE 0x0400 /* vnode access was revoked */
> +#define NOTE_STARTEXEC 0x0800 /* vnode was executed */
> +#define NOTE_STOPEXEC 0x1000 /* vnode execution stopped */
> +/* Applies both to EVFILT_VNODE and EVFILT_PROC */
> #define NOTE_PDATAMASK 0x000f /* mask for pid */
I don't think we should burn our 32 bits on this. Since pids are 32 bits,
this interface will fail unpredictably.
> /* additional flags for EVFILT_PROC */
> Index: src/sys/kern/kern_exec.c
> ===
> RCS file: /home/ncvs/src/sys/kern/kern_exec.c,v
> retrieving revision 1.193
> diff -d -u -r1.193 kern_exec.c
> --- src/sys/kern/kern_exec.c 11 Oct 2002 21:04:01 - 1.193
> +++ src/sys/kern/kern_exec.c 24 Oct 2002 06:57:41 -
> @@ -518,6 +518,8 @@
>* to locking the proc lock.
>*/
> textvp = p->p_textvp;
> + if (textvp)
> + VN_KNOTE(textvp, NOTE_STOPEXEC | p->p_pid);
> p->p_textvp = ndp->ni_vp;
Do these always stay an int or are there casts that could result in endian
problems?
>Index: src/sys/kern/kern_fork.c
>===
>RCS file: /home/ncvs/src/sys/kern/kern_fork.c,v
>retrieving revision 1.172
>diff -d -u -r1.172 kern_fork.c
>--- src/sys/kern/kern_fork.c 18 Oct 2002 17:45:41 - 1.172
>+++ src/sys/kern/kern_fork.c 24 Oct 2002 06:58:03 -
>@@ -724,6 +724,8 @@
>* tell any interested parties about the new process
>*/
> KNOTE(&p1->p_klist, NOTE_FORK | p2->p_pid);
>+ if (p2->p_textvp != NULL)
>+ VN_KNOTE(p2->p_textvp, NOTE_STARTEXEC | p2->p_pid);
> PROC_UNLOCK(p1);
>
> /*
This shows my doubt for the need for this since the NOTE_FORK is immediately
before your duplicate NOTE_STARTEXEC.
-Nate
To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-hackers" in the body of the message