PageRenderTime 181ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 0ms

/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/proc/tst.exitcore.ksh

https://github.com/okuoku/freebsd-head
Korn Shell | 92 lines | 41 code | 10 blank | 41 comment | 10 complexity | 42c3cb0404214c8ab63898b198c11bae MD5 | raw file
  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. # Copyright 2007 Sun Microsystems, Inc. All rights reserved.
  23. # Use is subject to license terms.
  24. #
  25. # ident "%Z%%M% %I% %E% SMI"
  26. #
  27. # This script tests that the proc:::exit probe fires with the correct argument
  28. # when the process core dumps. The problematic bit here is making sure that
  29. # a process _can_ dump core -- if core dumps are disabled on both a global
  30. # and per-process basis, this test will fail. Rather than having this test
  31. # muck with coreadm(1M) settings, it will fail explicitly in this case and
  32. # provide a hint as to the problem. In general, machines should never be
  33. # running with both per-process and global core dumps disabled -- so this
  34. # should be a non-issue in practice.
  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:::exit
  43. /curpsinfo->pr_ppid == $child &&
  44. execargs == "$longsleep" && args[0] == CLD_DUMPED/
  45. {
  46. exit(0);
  47. }
  48. proc:::exit
  49. /curpsinfo->pr_ppid == $child &&
  50. execargs == "$longsleep" && args[0] != CLD_DUMPED/
  51. {
  52. printf("Child process could did dump core.");
  53. exit(1);
  54. }
  55. EOF
  56. }
  57. sleeper()
  58. {
  59. while true; do
  60. $longsleep &
  61. /bin/sleep 1
  62. kill -SEGV $!
  63. done
  64. /bin/rm -f $corefile
  65. }
  66. if [ $# != 1 ]; then
  67. echo expected one argument: '<'dtrace-path'>'
  68. exit 2
  69. fi
  70. dtrace=$1
  71. longsleep="/bin/sleep 10000"
  72. corefile=/tmp/sleep.core
  73. sleeper &
  74. child=$!
  75. script
  76. status=$?
  77. #pstop $child
  78. #pkill -P $child
  79. kill $child
  80. #prun $child
  81. /bin/rm -f $corefile
  82. exit $status