CUDA IPC get invalid device context

  ImagePublisher()
  : Node("image_publisher")
  {
    Mat img(1920, 1080, CV_8UC3);
    randu(img, Scalar(0, 0, 0), Scalar(255, 255, 255));
    imwrite("publish.jpg", img);
    
    int devCount;
    void *ptr = NULL;
    cudaIpcMemHandle_t memHandle;
    checkCudaErrors(cudaGetDeviceCount(&devCount));
    RCLCPP_INFO(this->get_logger(), "%d", devCount);
    checkCudaErrors(cudaSetDevice(0));
    cudaDeviceProp prop;
    checkCudaErrors(cudaGetDeviceProperties(&prop, 0));
    if (!prop.unifiedAddressing) {
      RCLCPP_INFO(this->get_logger(), "Device 0 does not support unified addressing");
    }
    if (prop.computeMode != cudaComputeModeDefault) {
      RCLCPP_INFO(this->get_logger(), "Device 0 is an unsupported compute mode for this");
    }

    size_t count = 1920 * 1080 * 3;
    checkCudaErrors(cudaMalloc(&ptr, count));
    checkCudaErrors(cudaMemcpy(ptr, (const void*)img.data, count, cudaMemcpyHostToDevice));
    checkCudaErrors(cudaIpcGetMemHandle(&memHandle, (void*)ptr));
    uint8_t* byte_array = reinterpret_cast<uint8_t*>(&memHandle);

    void* ptr2 = NULL;
    checkCudaErrors(cudaIpcOpenMemHandle(&ptr2, memHandle, cudaIpcMemLazyEnablePeerAccess));

error happened in cudaIpcOpenMemHandle, and I check, cudaGetDeviceCount return 2, I don’t even use IPC in different process, but i get invalid device context from cudaIpcOpenMemHandle…