$! is definitely part of ksh and ksh93.
echo $SHELL
will show you what shell you're running.
Example of reasonable usage of &
#!/bin/ksh
nohup ./myscript.sh argument1 2>&1> mylogfile &
# do some other task
cnt=0
while [ $cnt -le 100 ]
do
# work on another task here
cnt=$(( $cnt + 1 ))
done
wait
The wait statement pauses for any still-running child process. Normally you don't plunk a process out into the background, expect it to run forever, and then completely forget it.
If you want a fully detached process that runs forever, consider a daemon. Some folks write daemons in shell - not best practice - but it is done. Normally UNIX daemons are written in C.
Chapter 13 of Stevens ' Advanced Programming in the UNIx Environment' 2ed is all about daemons.