Hi,
I'm hammering at a web app and I'm trying to setup functionality to monitor
the file system for changes and restart/reload the server automatically so
the changes are picked up (I'm using Mux which uses HttpServer).
The approach I have in mind is:
1. have a startup script which is run from the command line, something
like:
$ julia -L startup.jl
2. the startup script launches the web app, which starts the web server. My
intention was to run
$ julia -L app.jl
as a command inside startup.jl, detached, and have the startup.jl script
get back control, with app.jl running detached in the background.
3. once startup.jl gets back control, it begins monitoring the file system
and when changes are detected, kills the app and relaunches it.
That was the theory. Now, I might be missing something but I can't find a
way to detach the command I'm running and get control back to the startup
script. And I tried a lot of things!
===
I'm providing simpler example using "ping", which also run indefinitely,
similar to the web server.
julia> run(detach(`ping "www.google.com"`)) # the command is detached and
continues to run after the julia REPL is closed, but at this point the REPL
does not get control, there's no cursor available in the REPL
PING www.google.com (173.194.45.82): 56 data bytes
64 bytes from 173.194.45.82: icmp_seq=0 ttl=54 time=30.138 ms
64 bytes from 173.194.45.82: icmp_seq=1 ttl=54 time=30.417 ms
... more output ...
64 bytes from 173.194.45.82: icmp_seq=7 ttl=54 time=30.486 ms
64 bytes from 173.194.45.82: icmp_seq=8 ttl=54 time=30.173 ms
^CERROR: InterruptException:
<---- here I press Ctrl+C and only now the REPL gets back
the cursor, with the command still running in the background
===
Also, related to this, passing "&" into the command to detach does not work
as expected, the "&" is interpreted as argument of the command. Not sure if
this would help anyway to return control to the startup.jl script?
julia> run(detach(`ping "www.google.com" &`));
usage: ping [-AaDdfnoQqRrv] [-b boundif] [-c count] [-G sweepmaxsize]
[-g sweepminsize] [-h sweepincrsize] [-i wait] [−k trafficclass]
[-l preload] [-M mask | time] [-m ttl] [-p pattern]
[-S src_addr] [-s packetsize] [-t timeout][-W waittime] [-z tos]
host
ping [-AaDdfLnoQqRrv] [-b boundif] [-c count] [-I iface] [-i wait]
[−k trafficclass] [-l preload] [-M mask | time] [-m ttl] [-p
pattern] [-S src_addr]
[-s packetsize] [-T ttl] [-t timeout] [-W waittime]
[-z tos] mcast-group
ERROR: failed process: Process(`ping www.google.com &`, ProcessExited(64))
[64]
in run at /usr/local/Cellar/julia/0.4.2/lib/julia/sys.dylib
===
Thanks