Home | History | Annotate | Download | only in proc
      1 #
      2 # CDDL HEADER START
      3 #
      4 # The contents of this file are subject to the terms of the
      5 # Common Development and Distribution License (the "License").
      6 # You may not use this file except in compliance with the License.
      7 #
      8 # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
      9 # or http://www.opensolaris.org/os/licensing.
     10 # See the License for the specific language governing permissions
     11 # and limitations under the License.
     12 #
     13 # When distributing Covered Code, include this CDDL HEADER in each
     14 # file and include the License file at usr/src/OPENSOLARIS.LICENSE.
     15 # If applicable, add the following below this CDDL HEADER, with the
     16 # fields enclosed by brackets "[]" replaced with your own identifying
     17 # information: Portions Copyright [yyyy] [name of copyright owner]
     18 #
     19 # CDDL HEADER END
     20 #
     21 
     22 #
     23 # Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
     24 # Use is subject to license terms.
     25 #
     26 # ident	"%Z%%M%	%I%	%E% SMI"
     27 
     28 #
     29 # This script tests that the firing order of probes in a process is:
     30 # 
     31 #  1.  proc:::start
     32 #  2.  proc:::lwp-start
     33 #  3.  proc:::lwp-exit
     34 #  4.  proc:::exit
     35 #
     36 # If this fails, the script will run indefinitely; it relies on the harness
     37 # to time it out.
     38 #
     39 script()
     40 {
     41 	$dtrace -s /dev/stdin <<EOF
     42 	proc:::start
     43 	/curpsinfo->pr_ppid == $child/
     44 	{
     45 		self->start = 1;
     46 	}
     47 
     48 	proc:::lwp-start
     49 	/self->start/
     50 	{
     51 		self->lwp_start = 1;
     52 	}
     53 
     54 	proc:::lwp-exit
     55 	/self->lwp_start/
     56 	{
     57 		self->lwp_exit = 1;
     58 	}
     59 
     60 	proc:::exit
     61 	/self->lwp_exit == 1/
     62 	{
     63 		exit(0);
     64 	}
     65 EOF
     66 }
     67 
     68 sleeper()
     69 {
     70 	while true; do
     71 		/usr/bin/sleep 1
     72 	done
     73 }
     74 
     75 if [ $# != 1 ]; then
     76 	echo expected one argument: '<'dtrace-path'>'
     77 	exit 2
     78 fi
     79 
     80 dtrace=$1
     81 
     82 sleeper &
     83 child=$!
     84 
     85 script
     86 status=$?
     87 
     88 kill $child
     89 exit $status
     90