summaryrefslogtreecommitdiff
path: root/doio.c
diff options
context:
space:
mode:
authorPerl 5 Porters <perl5-porters.nicoh.com>1996-01-02 03:27:07 +0000
committerAndy Dougherty <doughera.lafayette.edu>1996-01-02 03:27:07 +0000
commit3595fceffa85af002f95c6d2ac8101f7f95d390a (patch)
treeca61525563992c2510bc4fe735f6e32ffc6ab64e /doio.c
parent568ef1f6d5ece280f6d27d282d56c43436151ebd (diff)
downloadperl-3595fceffa85af002f95c6d2ac8101f7f95d390a.tar.gz
VMS changes for kill.
Diffstat (limited to 'doio.c')
-rw-r--r--doio.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/doio.c b/doio.c
index c01c14e9b8..0e8713eb04 100644
--- a/doio.c
+++ b/doio.c
@@ -1071,6 +1071,36 @@ register SV **sp;
}
else
val = SvIVx(*mark);
+#ifdef VMS
+ /* kill() doesn't do process groups (job trees?) under VMS */
+ if (val < 0) val = -val;
+ if (val == SIGKILL) {
+# include <starlet.h>
+ /* Use native sys$delprc() to insure that target process is
+ * deleted; supervisor-mode images don't pay attention to
+ * CRTL's emulation of Unix-style signals and kill()
+ */
+ while (++mark <= sp) {
+ I32 proc = SvIVx(*mark);
+ register unsigned long int __vmssts;
+ if (!((__vmssts = sys$delprc(&proc,0)) & 1)) {
+ tot--;
+ switch (__vmssts) {
+ case SS$_NONEXPR:
+ case SS$_NOSUCHNODE:
+ SETERRNO(ESRCH,__vmssts);
+ break;
+ case SS$_NOPRIV:
+ SETERRNO(EPERM,__vmssts);
+ break;
+ default:
+ SETERRNO(EVMSERR,__vmssts);
+ }
+ }
+ }
+ break;
+ }
+#endif
if (val < 0) {
val = -val;
while (++mark <= sp) {