Thanks Per my previous comment, unfortunately @async / @spawn cause the app / server to exit immediately.
Let me give @persist a try. Cheers! vineri, 22 ianuarie 2016, 22:45:10 UTC+1, Erik Schnetter a scris: > > If you want to be able to terminate your local Julia process, and have > the server continue to run in the background, then you might want to > check out <https://github.com/eschnett/Persist.jl>. This does the > equivalent of run/detach, but in such a way that the detached process > runs as daemon. > > Otherwise, if you don't need this functionality, then @async is the way to > go. > > -erik > > On Fri, Jan 22, 2016 at 4:40 PM, Stefan Karpinski <ste...@karpinski.org > <javascript:>> wrote: > > @spawn runs a command on a (random) worker process. If you want to do > > "background" work in the current process, you can use @async: > > > > julia> t = @async (sleep(5); rand()) > > Task (runnable) @0x0000000112d746a0 > > > > julia> wait(t) > > 0.14543742643271207 > > > > > > On Fri, Jan 22, 2016 at 4:33 PM, Adrian Salceanu <adrian....@gmail.com > <javascript:>> > > wrote: > >> > >> Oh! The ruby analogy made me think about actually spawning the detached > >> command! Which produced the desired effect! > >> > >> julia> @spawn run(detach(`ping www.google.com`)) > >> > >> > >> > >> vineri, 22 ianuarie 2016, 22:29:27 UTC+1, Adrian Salceanu a scris: > >>> > >>> I guess what I'm looking for is the equivalent of Ruby's Process#spawn > >>> > >>> In REPL: > >>> > >>> >> pid = Process.spawn("ping www.google.com", :out => '/dev/null') > >>> 83210 > >>> >> <-- the process is running in the > background > >>> >> and control has been returned to the REPL > >>> > >>> > >>> vineri, 22 ianuarie 2016, 22:06:01 UTC+1, Adrian Salceanu a scris: > >>>> > >>>> 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 > > > > > > > > -- > Erik Schnetter <schn...@gmail.com <javascript:>> > http://www.perimeterinstitute.ca/personal/eschnetter/ >