Mailing Lists: Apple Mailing Lists

Image of Mac OS face in stamp
 
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: KUNCExecute problems



Thanks for the tips! The shell magic fixed it; KUNCExecute works properly on the script now. As you might have guessed, I'm pretty much a Unix newbie so there is no such thing as too pedantic a suggestion in that regard... :)

Thanks,
Jim

At 8:43 AM -0400 5/5/05, Andrew Gallatin wrote:
Jim Wintermyre writes:
> I tried doing something very similar to the listing below, but I
> still can't get it to work. I'm hoping I'm just being dense and one
> of you guys can help me out. I created a test shell script, and put
> it at /usr/bin/test, and ran chmod 755 on it. Line endings are unix.
> I can run ./test in the terminal and the script runs as expected.
> The script itself looks like this:
>
> echo "This is a test"
> open /Applications/TextEdit.app
>
> In my driver's user client, when I get the client died message, I do this:
>
> kern_return_t result;
> result = KUNCExecute("/usr/bin/test", kOpenAppAsRoot, kOpenApplicationPath);
>
> If I then kill one of my client apps, I do get the client died
> message (which I log to the console right before the KUNCExecute
> call), but the script doesn't appear to be running. I don't see the
> text output, and TextEdit doesn't launch.
>
> Is there anything obvious that I'm doing wrong here?



To be a valid shell script, it needs to begin with shell magic, which is #![interpreter-path]. Eg, #!/bin/sh.

I'm pretty sure that when you exec something from a shell, it first
tries to exec() it, then if that fails (like because there is no shell
magic at the start), it tries to source the file.


From ktrace, when script foo has no magic:

248 sh CALL execve(0x30b730,0x30b8d0,0x30b790) 248 sh NAMI "./foo" 248 sh RET execve -1 errno 8 Exec format error 248 sh CALL open(0x30b730,0,0x30b790) 248 sh NAMI "./foo" 248 sh RET open 3


From ktrace, when script foo has magic:

255 sh CALL execve(0x30b740,0x30b8e0,0x30b7a0) 255 sh NAMI "./foo" 255 sh NAMI "/bin/sh" 255 sh NAMI "/usr/lib/dyld" 255 sh RET execve 0

Since KUNCExecute() is not a shell, a failure from exec() would stop
it, and the script would not execute.


Also, I don't think that stdout is connected to anything in the KUNCExecute() environment, so I would not expect to see "This is a test" show up anywhere. Try redirecting it to a file (> /tmp/foo). That's how I debugged my script.

Lastly, at the risk of sounding pedantic, its always a bad idea to
name an executable "test" -- there is a /bin/test program which is
integral to the functioning of nearly all shell scripts.  You want to
make sure you don't override or clobber it ;)


Drew

_______________________________________________ Do not post admin requests to the list. They will be ignored. Darwin-drivers mailing list (email@hidden) Help/Unsubscribe/Update your Subscription: http://lists.apple.com/mailman/options/darwin-drivers/email@hidden

This email sent to email@hidden
References: 
 >Re: KUNCExecute problems (From: Jim Wintermyre <email@hidden>)
 >Re: KUNCExecute problems (From: Andrew Gallatin <email@hidden>)



Visit the Apple Store online or at retail locations.
1-800-MY-APPLE

Contact Apple | Terms of Use | Privacy Policy

Copyright © 2007 Apple Inc. All rights reserved.