def run():
    app = Application(pages, **config)
    port = random.randrange(options.min_port, options.max_port)
    app.listen(port, address='0.0.0.0')
    signal.signal(signal.SIGCHLD, handle_sigchld)
    args = ['ab']
    args.extend(['-n', str(options.n)])
    concurrency_level = min(options.c, options.n)
    args.extend(['-c', str(concurrency_level)])
    if options.post_file is not None:
        args.extend(['-p', options.post_file])
        args.extend(['-T', 'application/json'])
    if options.email is not None:
        args.extend(['-H', 'Email:{}'.format(options.email)])
    if options.token is not None:
        args.extend(['-H', 'Token:{}'.format(options.token)])
    if options.keepalive:
        args.append('-k')
    if options.quiet:
        # just stops the progress messages printed to stderr
        args.append('-q')
    args.append('http://127.0.0.1:{}{}'.format(port, options.path))
    subprocess.Popen(args)
    IOLoop.instance().start()
    IOLoop.instance().close()
    del IOLoop._instance
    assert not IOLoop.initialized()