diff options
Diffstat (limited to 'cddl/contrib/dtracetoolkit/Misc/woof.d')
-rwxr-xr-x | cddl/contrib/dtracetoolkit/Misc/woof.d | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/cddl/contrib/dtracetoolkit/Misc/woof.d b/cddl/contrib/dtracetoolkit/Misc/woof.d new file mode 100755 index 0000000..d856a09 --- /dev/null +++ b/cddl/contrib/dtracetoolkit/Misc/woof.d @@ -0,0 +1,63 @@ +#!/usr/sbin/dtrace -s +/* + * woof.d - Bark whenever new processes appear. Needs /dev/audio. + * Written in DTrace (Solaris 10 3/05). + * + * $Id: woof.d 3 2007-08-01 10:50:08Z brendan $ + * + * USAGE: woof.d & + * + * SEE ALSO: /usr/dt/bin/sdtaudiocontrol # to set volume + * + * COPYRIGHT: Copyright (c) 2006 Brendan Gregg. + * + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License, Version 1.0 only + * (the "License"). You may not use this file except in compliance + * with the License. + * + * You can obtain a copy of the license at Docs/cddl1.txt + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * CDDL HEADER END + * + * 14-Aug-2006 Brendan Gregg Created this. + * 14-Aug-2006 " " Last update. + */ + +#pragma D option quiet +#pragma D option destructive +#pragma D option switchrate=10hz + +inline int SCREEN_OUTPUT = 0; /* Set to 1 for screen output */ + +/* barks prevents woof.d from barking too much (up to 20 barks/second) */ +int barks; + +dtrace:::BEGIN +{ + SCREEN_OUTPUT ? trace("Beware of the dog!\n") : 1; +} + +/* + * Call the shell to run a background audioplay command (cat > /dev/audio + * doesn't always work). One problem this creates is a feedback loop, + * where we bark at our own barks, or at other dogs barks; entertaining + * as this is, it can really slog the system and has been avoided by + * checking our ancestory. + */ +proc:::exec-success +/!progenyof($pid) && barks++ < 2/ +{ + SCREEN_OUTPUT ? trace("Woof! ") : 1; + system("audioplay /usr/share/audio/samples/au/bark.au &"); +} + +profile:::tick-10hz +{ + barks = 0; +} |