add signal && singleton