xref: /netbsd-src/external/cddl/dtracetoolkit/dist/Bin/woof.d (revision c29d51755812ace2e87aeefdb06cb2b4dac7087a)
1 #!/usr/sbin/dtrace -s
2 /*
3  * woof.d - Bark whenever new processes appear. Needs /dev/audio.
4  *          Written in DTrace (Solaris 10 3/05).
5  *
6  * $Id: woof.d,v 1.1.1.1 2015/09/30 22:01:07 christos Exp $
7  *
8  * USAGE:       woof.d &
9  *
10  * SEE ALSO:    /usr/dt/bin/sdtaudiocontrol     # to set volume
11  *
12  * COPYRIGHT: Copyright (c) 2006 Brendan Gregg.
13  *
14  * CDDL HEADER START
15  *
16  *  The contents of this file are subject to the terms of the
17  *  Common Development and Distribution License, Version 1.0 only
18  *  (the "License").  You may not use this file except in compliance
19  *  with the License.
20  *
21  *  You can obtain a copy of the license at Docs/cddl1.txt
22  *  or http://www.opensolaris.org/os/licensing.
23  *  See the License for the specific language governing permissions
24  *  and limitations under the License.
25  *
26  * CDDL HEADER END
27  *
28  * 14-Aug-2006	Brendan Gregg	Created this.
29  * 14-Aug-2006	   "      "	Last update.
30  */
31 
32 #pragma D option quiet
33 #pragma D option destructive
34 #pragma D option switchrate=10hz
35 
36 inline int SCREEN_OUTPUT = 0;	/* Set to 1 for screen output */
37 
38 /* barks prevents woof.d from barking too much (up to 20 barks/second) */
39 int barks;
40 
41 dtrace:::BEGIN
42 {
43 	SCREEN_OUTPUT ? trace("Beware of the dog!\n") : 1;
44 }
45 
46 /*
47  * Call the shell to run a background audioplay command (cat > /dev/audio
48  * doesn't always work). One problem this creates is a feedback loop,
49  * where we bark at our own barks, or at other dogs barks; entertaining
50  * as this is, it can really slog the system and has been avoided by
51  * checking our ancestory.
52  */
53 proc:::exec-success
54 /!progenyof($pid) && barks++ < 2/
55 {
56 	SCREEN_OUTPUT ? trace("Woof! ") : 1;
57 	system("audioplay /usr/share/audio/samples/au/bark.au &");
58 }
59 
60 profile:::tick-10hz
61 {
62 	barks = 0;
63 }
64